2012-11-28 33 views
6

Tôi đã thấy trong hướng dẫn Hector và Cassandra rằng có DynamicCompositeType.Cassandra CompositeType

Ai có thể xây dựng trên sự khác biệt giữa

create column family Composite with comparator ='DynamicCompositeType 
     (t=>TimeUUIDType,s=>UTF8Type)' 
     and default_validation_class=UTF8Type and key_validation_class=UTF8Type; 

create column family Composite 
    with comparator = 'CompositeType(TimeUUIDType,UTF8Type)' 
    and key_validation_class = 'UTF8Type' 
    and default_validation_class = 'UTF8Type' 

tôi đã không tìm thấy nó trong Cassandra docs

Trả lời

6

Nó có thể giúp chúng ta hiểu Cassandra lưu trữ dữ liệu và những gì composite thực sự là:

  • Tất cả dữ liệu, bất kể là validator/so sánh bạn sử dụng, được lưu giữ như byte. Khi bạn chỉ định trình xác nhận hợp lệ, bạn chỉ cần yêu cầu Cassandra đảm bảo rằng các byte đó được mã hóa như bạn mong muốn. Ngược lại, một bộ so sánh chỉ đơn giản là sắp xếp các cột dựa trên thứ tự tự nhiên cụ thể cho mã hóa mà bạn đã cung cấp.

  • Vật liệu tổng hợp, sau đó, chỉ là mảng byte có mã hóa cụ thể. Mã hóa này khá đơn giản: đối với mỗi thành phần, nó lưu trữ độ dài hai byte, tiếp theo là thành phần được mã hóa byte, theo sau là một bit chấm dứt xác định xem nó có bao gồm hay không. Vì mọi thứ có thể được lưu trữ trong mảng byte, bạn có thể có các loại thành phần khác nhau - nhưng bạn phải biết chúng là gì và giải mã/mã hóa chúng.

  • Để đạt được các vật liệu tổng hợp động, Hector ghi dữ liệu loại bổ sung vào mảng byte, để biết cách giải mã các byte khi đọc chúng trở lại. Vật liệu tổng hợp tĩnh không có cách nào để làm điều này vì không có thông tin về loại.

0

Với tĩnh composit CF mỗi cột sẽ có cùng loại, nơi như với CCF động mỗi cột có thể có các loại dữ liệu khác nhau.

Nếu bạn chắc chắn về loại dữ liệu nào nằm trong CF tốt hơn để gắn với định nghĩa tĩnh, hãy sử dụng CF động.