Oboje macie dobre punkty i to może być mylące. W przykładzie, w którym jabłko jest wartością kluczową, kolumna jest danymi, które zawierają wszystkie 4 elementy danych. Z tego, co zostało opisane, wynika, że wszystkie 4 elementy danych są przechowywane razem jako pojedynczy obiekt, a następnie analizowane przez aplikację w celu pobrania wymaganej wartości. Dlatego z perspektywy IO muszę przeczytać cały obiekt. IMHO jest to z natury wiersz (lub obiekt) oparty nie na kolumnie.
Przechowywanie w oparciu o kolumnę stało się popularne w przypadku magazynowania, ponieważ oferuje ekstremalną kompresję i zmniejszone IO dla pełnych skanów tabeli (DW), ale kosztem zwiększenia IO dla OLTP, kiedy trzeba było wyciągnąć każdą kolumnę (wybierz *). Większość zapytań nie potrzebuje każdej kolumny, a ze względu na kompresję IO można znacznie zredukować do pełnych skanów tabel tylko dla kilku kolumn. Pozwól mi podać przykład:
apple -> colour weight price variety
"red" 100 40 "Cox"
grape -> colour weight price variety
"red" 100 40 "Cox"
Mamy dwa różne owoce, ale oba mają kolor = czerwony. Jeśli przechowujemy kolory na oddzielnej stronie dysku (bloku) od wagi, ceny i odmiany, jedyną rzeczą przechowywaną jest kolor, a kiedy skompresujemy stronę, możemy osiągnąć ekstremalną kompresję z powodu dużej ilości duplikacji. Zamiast przechowywać 100 wierszy (hipotetycznie) na stronie, możemy przechowywać 10 000 kolorów.Teraz, aby przeczytać wszystko z kolorem czerwonym, może to być 1 IO zamiast tysięcy IO, co jest naprawdę dobre dla magazynowania i analizowania, ale złe dla OLTP, jeśli muszę zaktualizować cały wiersz, ponieważ wiersz może mieć setki kolumn i jeden update (lub insert) może wymagać setek IO.
Chyba że czegoś mi brakuje, nie nazwałbym tego opartego na kolumnach, nazwałbym to obiektowym. Nadal nie jest jasne, w jaki sposób obiekty są rozmieszczone na dysku. Czy wiele obiektów umieszczonych jest na tej samej stronie dysku? Czy istnieje sposób zapewnienia, że obiekty o tych samych danych meta idą w parze? Do tego stopnia, że jeden owoc może zawierać inne dane niż inny owoc, ponieważ jego tylko meta dane lub xml lub cokolwiek chcesz przechowywać w samym obiekcie, czy istnieje sposób na zapewnienie, aby pewne pasujące typy owoców były przechowywane razem, aby zwiększyć wydajność?
Larry
Właśnie o to chodzi! Doskonale wyjaśnia różnicę. W ten sposób Cassandra może być zorientowana w kolumnie, ale zależy to od tego, czy używasz nazw kolumn. Dziękujemy za wyjaśnienie! – cesare
Możesz zademonstrować orientację w kolumnie, odwracając pierwszy stół. Powiedzmy, że kluczem wiersza był "kolor", "waga", "cena". Następnie nazwy kolumn to typy owoców "jabłko", "pomarańczowy" itd. –