2013-06-06 19 views
7

Więc zaimplementowałem Haystack z ElasticSearch tydzień temu w naszej aplikacji BETA. Jedną rzeczą, którą mogę zauważyć jest to, że pobieranie niektórych danych (dużej ilości) z powrotem do naszych użytkowników (na przykład wymienienie wszystkich użytkowników w aplikacji) jest znacznie szybsze, przechodząc przez Haystack, a następnie ORM Django. Teraz udostępnię usługę REST (z TastyPie), aby móc wyświetlać możliwe tablety w ciągu najbliższych tygodni, ponieważ chcę mieć dostęp do informacji z iPadów, tabletów Nexus i tak dalej.Kiedy używać Haystack/ElasticSearch vs ORM Django

Jedną z rzeczy, zastanawiałem się, to kiedy powinienem zapytać ORM vs Haystack/ElasticSearch? Na przykład, jeśli użytkownik na tablecie żąda określonej grupy użytkowników, czy powinniśmy pozwolić TastyPie wysłać zapytanie do ORM, czy przejść do ElasticSearch?

Jeśli spojrzymy na tę odpowiedź Django: Haystack or ORM, wszyscy możemy się zgodzić, że DB jest tworzony w celu pobierania i zapisywania danych. Czy możemy jednak powiedzieć, że pobieranie szybciej może być szybsze dzięki Haystack/ElasticSearch po aktualizacji wyszukiwarki?

Jestem nieco zdezorientowany, kiedy, czy powinniśmy nie zapytać Haystack, czy jest znacznie szybciej ?!

Odpowiedz

6

Aby było jasne, domyślam się, że mówisz o wyszukiwaniu Elasticsearch przez Haystack bez potrzeby późniejszej instancji żadnych obiektów dla wyników wyszukiwania z danymi z Twojej bazy danych.

Niektóre punkty do rozważenia oprócz zagadnień wymienionych w the other postu:

  • Wyszukiwarka jak Elasticsearch jest wysoce zoptymalizowany gdy ma do czynienia z wyszukiwania pełnotekstowego (Gdy robi coś z SQL to bardzo zależy od bazy/engine, którego używasz)

  • Zapytania wymagające dużej liczby relacji/łączenia będą najprostsze w obsłudze z ORM, ale z drugiej strony można np. zapisać dane z relacji klucza obcego w zdenormalizowanym moda podczas korzystania z ES, która może zwiększyć wydajność . Oczywiście można również denormalizować tabele bazy danych, ale jest to często uważane za złą praktykę, o ile wiesz, co robisz, np. Podczas rozwiązywania wąskich gardeł wydajności.

  • ES jest dość łatwy do skalowania, a skalowanie bazy danych SQL może być bardziej skomplikowane.

  • Najprawdopodobniej jest to decyzja, która zależy w dużym stopniu od przypadku użycia, ilości danych do przetworzenia i zapytań, które zamierzasz uruchomić. Najlepszą rzeczą oczywiście jest - jak zawsze - dokonanie benchmarkingu i porównanie dwóch rozwiązań. Ale nie rób żadnych przedwczesnych optymalizacji, ponieważ jedną wielką zaletą ORM jest utrzymywanie prostoty - nie musisz dbać o integralność danych i utrzymywać dodatkowego systemu.

+0

Idealnie! Dzięki – abisson

Powiązane problemy