Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Umieszczanie wszystkich obiektów python-rom na liście

Istnieją dwa problemy z dostarczonym kodem, które wyjaśniają, dlaczego otrzymujesz wyniki, które otrzymujesz.

Pierwszy problem polega na tym, że zapytanie test.query.filter(url ='.').all() zwróci pustą listę. Zwróci to pustą listę tylko dlatego, że nie masz prawidłowego indeksu do użycia z określonym filtrem. Masz 2 indeksy dla tej kolumny — unikalny indeks (przydatny do wyszukiwania adresów URL według dokładnego ciągu) i indeks sufiksu (przydatny do wyszukiwania adresów URL, które kończą się określonym ciągiem) — ale żaden z nich nie oferuje możliwości filtrowania według tego, co byłoby w świecie relacyjnym zapytanie „podobne”. Indeks prefiksu (utworzony za pomocą prefix=True ) pozwoli Ci użyć test.query.like(url='*.') , ale byłoby to bardzo powolne (wykonuje skanowanie indeksu zamiast bezpośredniego wyszukiwania [1]).

Aby zapobiec takim problemom związanym z indeksami/zapytaniami, dodałem wyjątki QueryError, gdy użytkownicy próbują filtrować swoje dane według nieistniejących indeksów. Dzisiejszego wieczoru wydam 0.31.4 nieco później z tymi zmianami.

Drugi błąd, który jest przyczyną wyjątku, polega na tym, że wywołujesz .count() bez argumentów. W punkcie Twojego h.count() zadzwoń, type(h) == list , a obiekty listy Pythona wymagają argumentu do zliczania wartości równych argumentowi podanemu na liście. Jeśli pominąłeś .all() część oryginalnego zapytania, otrzymasz obiekt zapytania z powrotem. Ten obiekt zapytania ma .count() metody i zwróci liczbę dopasowanych wyników.

[1] Nie wszystkie zapytania „podobne” w pamięci ROM są powolne, ale te, które są szybkie, wymagają prefiksów innych niż wieloznaczne, aby ograniczyć zakresy danych do skanowania/filtrowania.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Laravel Echo Server, Redis, Socket.IO:Wygląda na to, że nie mogą działać

  2. Przecięcie dwóch lub więcej posortowanych zbiorów

  3. Różnica między StackExchange.Redis i ServiceStack.Redis

  4. Regiony w stylu Azure Cache/DataCache w Redis

  5. LogicException:Upewnij się, że rozszerzenie PHP Redis jest zainstalowane i włączone