2012-03-05 33 views
9

Tài liệu về HBase nói rằng tránh tạo ra hơn 2-3 họ hàng cột vì HBase không xử lý nhiều hơn 2-3 nhóm cột rất tốt. Lý do cho điều này là nén và xả và do đó IO. Tuy nhiên, nếu tất cả các cột của tôi luôn được điền (cho mỗi hàng) thì tôi nghĩ lý do này không quan trọng, vì vậy, xem xét việc truy cập vào các cột là hoàn toàn ngẫu nhiên (tôi muốn truy cập bất kỳ tổ hợp cột nào) - tôi có thể có cột family -one cấu hình cột (có hiệu quả cố gắng để làm cho nó cột tinh khiết).Gia đình cột HBase

Có nhiều blog/wiki giải thích điều này nhưng tất cả đều có vẻ mâu thuẫn và thêm nhiều nhầm lẫn. Tôi chỉ không có vẻ để có thể tiêu hóa một thực tế rằng HBase thích một gia đình cột, sau đó những gì các điểm gọi là một cửa hàng cột?

Trả lời

21

Hiện tại (mặc dù điều này được dự kiến ​​sẽ thay đổi), tất cả các họ cột cho một khu vực đều được dội cùng nhau. Đây là lý do chính tại sao mọi người nói "HBase không làm tốt với hơn 2 hoặc 3 gia đình cột". Hãy xem xét hai CF, mỗi cái có một cột. Cột A: Một cửa hàng toàn bộ văn bản trang web. Cột B: B lưu trữ số từ trong trang. Vì vậy, mỗi khi chúng ta tuôn ra A: A (sẽ xảy ra thường xuyên hơn vì dữ liệu A: A lớn hơn nhiều), chúng ta cũng cần phải đi qua toàn bộ một tệp riêng biệt I/O để định tuyến cho cột B: B, mặc dù không có cần phải- với B: B chỉ giữ số, tôi có thể đi trong nhiều tháng mà không xả nó.

Nếu bạn lưu trữ A và B trong cùng một họ cột (A: A và A: B), có thể bạn sẽ thấy hiệu suất I/O tuôn ra tốt hơn, và vì hầu hết các lần đọc HBase hoàn toàn là từ memstore, bạn sẽ có thể thấy rằng tốc độ đọc là tương đương.

Ngoài ra, và có lẽ quan trọng hơn, nếu cardinality của các cột là cực kỳ khác nhau, sau đó các máy chủ vùng của bạn sẽ cần phải duy trì tập tin vô dụng cho các nhóm ít dày đặc của bạn. Điều này sẽ không bao giờ thay đổi.

Tất cả điều này có sẵn trong HBase Book.

Vì vậy, giống như trong tất cả các tình huống hiệu suất như vậy, đo lường trước khi quyết định đường dẫn "chính xác" là gì.

+0

Cảm ơn bạn đã giải thích! – PrakashT

+0

Vì vậy, trong trường hợp của tôi, theo như tôi hiểu, tôi có hai lựa chọn: a) Tôi có tất cả các cột trong một họ cột. Điều này sẽ có tác động đến hiệu suất vì hầu hết thời gian tôi cần truy cập chỉ 1-2 cột nhưng với thiết kế này tôi sẽ đọc toàn bộ hàng. Mặc dù những lần đọc này sẽ được phân phối trên nhiều máy chủ khu vực. 2) Tôi chia các cột của tôi trong các gia đình sao cho chúng có kích thước tương tự nhau. – PrakashT

+2

Bạn có lẽ nên ngừng lo lắng về việc đọc toàn bộ hàng. HBase cực kỳ tốt về việc chỉ đọc những gì nó thực sự cần. Nếu các tế bào mà bạn cần phải đọc là trong bộ nhớ, HBase sẽ không có thêm IO đĩa nào cả. –

Các vấn đề liên quan