Czy mogę wykonać bez wartości atrybutu elementu?

Autor:guilherme goetze

Musisz zrobić coś podobnego do sklepu internetowego. Problem polega na wyborze sposobu przechowywania informacji o towarach, ponieważ istnieje ponad sto rodzajów towarów, a każdy z nich ma swój własny zestaw atrybutów.

Ten sam Magento Commerce wykorzystuje do tych celów strukturę EAV, dzięki której wybrane żądania stają się bardzo skomplikowane i nie działają zbyt szybko. Do tej pory jedyną myślą jest okresowa konwersja EAV do normalnej tabeli, z której będą rysowane próbki. Czy istnieje bardziej wydajny sposób w MySQL lub PostgreSQL?

Również w trakcie szukania odpowiedzi na to pytanie wielokrotnie spotkałem się z opinią, że w tym przypadku warto odrzucić relacyjną bazę i przejść na noSQL. Jaka jest prawda i będzie działać szybciej?

Odpowiedzi

linda woodward
Problem EAV polega na tym, że każde pole leży niezależnie od obiektu. Tj wybór 10 obiektów z 10 pól da około 100 losowych poszukiwań. Opcje rozwiązania:
1. Tabele pamięci - szybkie wyszukiwanie losowe, ograniczony rozmiar i potrzeba synchronizacji z rzeczywistymi danymi.
2. Sfinks i inni go lubią. Dodatkowo przechowujemy dane w formacie wygodniejszym dla wyszukiwania fasetowego.
3. nosql - łatwiejsze do skalowania, dane są często przechowywane w pamięci, brak schematu, ale z możliwością tworzenia indeksów na polach.
Odpowiedzi:
Może wiesz, że nosql działa szybciej niż EAV? I na ogół, który ze sposobów, które sugerujesz, jest szybszy w wyszukiwaniu według atrybutów, przynajmniej teoretycznie? - cinta buku
Wszystko zależy od konkretnych nosql i konkretnych danych. W większości przypadków nie będzie wolniej.
Jeśli potrzebujesz gwarantowanej prędkości - spójrz w kierunku wyszukiwania facetów za pomocą Sphinx lub Lucene / Solr. Wdrożenie nie będzie najwygodniejsze (chociaż mogą już istnieć piękne opakowania), ale prędkość jest znacznie wyższa. Należy jednak pamiętać, że wyszukiwanie w tym przypadku odbywa się według wcześniej określonych zakresów - żądanie takie jak "cena od 42,34 USD do 123,45 USD" nie będzie działać. - tamar agatha kapanadze
wykona około 100 wyszukiwania losowego

Dziwne stwierdzenie. Jeśli weźmiesz ten sam MySQL, będziesz miał próbkę, na przykład po przejściu każdej z 2 tabel (Entity i Attribute) z indeksami. Tj 100 pól dla 2 przebiegów na indeksach. - lemmy
brak schematu, ale z możliwością tworzenia indeksów na polach

Zależy od DBMS. Gdzieś możesz. - cheeriolafs
bascha
Możesz wypróbować wariant z jednostką, która ma: identyfikator, wspólne pola (takie jak koszt i dostępność), pole wyszukiwania (połączone wartości atrybutów za pomocą separatora wieloznacznego) i pole XML (lub dowolny inny format), w którym będą przechowywane wszystkie informacje .
Odpowiedzi:
Na pierwszy rzut oka, bardzo dobrze. Dzięki za pomysł, musisz o tym pomyśleć. - nalitta
Nawiasem mówiąc, jeśli liczba atrybutów jest ograniczona, można utworzyć tabelę encji (id, num_attr_1, num_attr_2, str_attr_1, str_attr_2 itd.). Wszystkie kolumny są zerowe. Zachowaj oddzielny schemat (typ jednostki). - patti kielt
Czy potrzebuję posta na temat inteligentnego domu inteligentnego? :: GxNeur - Czy demon spada? :: Wybór dostawcy w St. Petersburgu :: Telefonia do biura w Moskwie? :: MongoDB i OLAP
Zostaw odpowiedź
Linki