2014-09-17 18 views
7

Tôi đang sử dụng DSE để tích hợp Cassandra/Solr để dữ liệu được lưu trữ trong Cassandra và được lập chỉ mục trong Solr. Nó rất tự nhiên khi sử dụng Cassandra để xử lý hoạt động CRUD và sử dụng Solr để tìm kiếm toàn văn bản tương ứng, và DSE thực sự có thể đơn giản hóa việc đồng bộ hóa dữ liệu giữa Cassandra và Solr.Khi nào sử dụng Cassandra so với Solr trong DSE?

Khi nói đến truy vấn, tuy nhiên, có hai cách để thực hiện: Chỉ số cấu hình phụ/thủ công Cassandra so với Solr. Tôi muốn biết khi nào nên sử dụng phương pháp nào và sự khác biệt về hiệu suất nói chung là gì, đặc biệt là khi thiết lập DSE.

Đây là một ví dụ về trường hợp sử dụng trong dự án của tôi. Tôi có một bảng Cassandra lưu trữ một số dữ liệu thực thể mục. Bên cạnh hoạt động CRUD cơ bản, tôi cũng cần truy xuất các mục bằng bình đẳng trên một số trường (nói danh mục) và sau đó sắp xếp theo một số thứ tự (trong trường hợp của tôi ở đây, một trường like_count).

tôi có thể nghĩ trong ba cách khác nhau để xử lý nó:

  1. Declare 'lập chỉ mục = true' trong schema Solr cho cả chủng loại và lĩnh vực LIKE_COUNT và truy vấn trong Solr
  2. Tạo một bảng denormalized trong Cassandra với khóa chính (thể loại, LIKE_COUNT, id)
  3. Tạo một bảng denormalized trong Cassandra với khóa chính (loại, trật tự, id) và sử dụng một thành phần bên ngoài, chẳng hạn như Spark/Storm, để sắp xếp các mục bằng cách LIKE_COUNT

Phương pháp đầu tiên có vẻ là phương pháp đơn giản nhất để triển khai và duy trì. Tôi chỉ viết một số mã truy cập Solr tầm thường và việc nâng hạng nặng còn lại được xử lý bằng tìm kiếm Solr/DSE.

Phương pháp thứ hai yêu cầu không chuẩn hóa thủ công khi tạo và cập nhật. Tôi cũng cần phải duy trì một bảng riêng biệt. Ngoài ra còn có vấn đề về tombstone vì like_count có thể được cập nhật thường xuyên. Phần tốt là đọc có thể nhanh hơn (nếu không có bia mộ quá mức).

Phương pháp thứ ba có thể làm giảm bớt vấn đề bia mộ với chi phí của một thành phần phụ để phân loại.

Bạn nghĩ phương pháp nào là lựa chọn tốt nhất? Sự khác biệt về hiệu suất là gì?

Trả lời

21

Cassandra chỉ số thứ cấp đã hạn chế trường hợp sử dụng:

  1. Không hơn một vài cột lập chỉ mục.
  2. Chỉ một cột được lập chỉ mục duy nhất trong truy vấn.
  3. Quá nhiều giao thông liên nút cho dữ liệu cardinality cao (tương đối giá trị cột duy nhất)
  4. Quá nhiều giao thông liên nút cho dữ liệu cardinality thấp (tỷ lệ phần trăm cao của hàng sẽ phù hợp)
  5. Queries cần phải được biết trước vì vậy mô hình dữ liệu có thể được tối ưu hóa xung quanh chúng.

Do những giới hạn này, ứng dụng tạo "bảng chỉ mục" được lập chỉ mục theo bất kỳ cột nào là điều phổ biến. Điều này yêu cầu dữ liệu được sao chép từ bảng chính vào mỗi bảng chỉ mục hoặc cần thêm truy vấn để đọc bảng chỉ mục và sau đó đọc hàng thực tế từ bảng chính sau khi đọc khóa chính từ bảng chỉ mục. Truy vấn trên nhiều cột sẽ phải được lập chỉ mục theo cách thủ công trước, khiến cho các truy vấn đặc biệt có vấn đề. Và bất kỳ bản sao nào cũng sẽ phải được ứng dụng cập nhật theo cách thủ công vào từng bảng chỉ mục.

Khác hơn là ... chúng sẽ hoạt động tốt trong trường hợp số lượng "hàng" khiêm tốn sẽ được chọn từ số lượng nút khiêm tốn và truy vấn được chỉ định trước và không được đặc biệt.

DSE/Solr là tốt hơn cho:

  1. Một số vừa phải cột được lập chỉ mục.
  2. Truy vấn phức tạp với một số cột/trường được tham chiếu - Lucene khớp với tất cả các trường được chỉ định trong truy vấn song song. Lucene lập chỉ mục dữ liệu trên mỗi nút, do đó các nút truy vấn song song.
  3. Truy vấn đặc biệt nói chung, nơi các truy vấn chính xác không được biết trước.
  4. Truy vấn văn bản đa dạng như tìm kiếm từ khóa, ký tự đại diện, mờ/thích, phạm vi, bất bình đẳng.

Có hiệu suất và chi phí dung lượng để sử dụng lập chỉ mục Solr, do đó cần phải có bằng chứng về việc thực hiện ý tưởng để đánh giá lượng RAM, bộ nhớ và nút bổ sung phụ thuộc vào số cột bạn lập chỉ mục số lượng văn bản được lập chỉ mục và bất kỳ độ phức tạp lọc văn bản nào (ví dụ: n-gram cần nhiều hơn.) Nó có thể tăng từ 25% cho một số lượng nhỏ các cột được lập chỉ mục đến 100% nếu tất cả các cột được lập chỉ mục. Ngoài ra, bạn cần phải có đủ các nút sao cho chỉ số Solr trên mỗi nút phù hợp với RAM hoặc phần lớn trong RAM nếu sử dụng SSD. Và vnodes hiện không được đề xuất cho các trung tâm dữ liệu Solr.

+0

+1 Câu trả lời tuyệt vời. Và tôi hoàn toàn đồng ý với chỉ số phụ có trường hợp sử dụng hạn chế. Có lẽ là công cụ hiểu lầm nhất trong Cassandra ngay bây giờ. – Aaron

+0

+1 Tôi không thể nói điều đó tốt hơn. Gần đây tôi đã gặp tình trạng khó xử này và thấy mình sử dụng Solr cho ALL hoạt động đọc vì Cassandra không thể lọc nhiều hơn một cột cho mỗi truy vấn (về cơ bản, vì chỉ số phụ Cassandra chỉ có thể được khai báo trên một cột tại một thời điểm - tức là có không có chỉ số hợp chất). Đối với tôi, đây là giới hạn chính. –

+0

Câu trả lời hay !! Làm thế nào bạn sẽ nói chỉ số SASI so sánh với DSE/Solr. Thực sự rất thích nghe ý kiến ​​của bạn. – taylorcressy

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