2010-06-17 35 views
6

Chúng tôi vẫn đang đánh giá Cassandra cho kho dữ liệu của chúng tôi. Là rất thử nghiệm đơn giản, tôi đã chèn giá trị cho 4 cột vào nhóm Keyspace1/Standard1 trên máy cục bộ của tôi với khoảng 100 byte dữ liệu. Sau đó tôi đọc lại nhanh nhất có thể bằng phím hàng. Tôi có thể đọc lại ở mức 160.000/giây. Tuyệt quá.Cassandra tốc độ đọc ngẫu nhiên

Sau đó, tôi đưa vào một triệu bản ghi tương tự tất cả với các khóa dưới dạng X.Y trong đó X trong (1..10) và Y trong (1..100.000) và tôi truy vấn cho một bản ghi ngẫu nhiên. Hiệu suất giảm xuống còn 26.000 truy vấn mỗi giây. Số liệu này vẫn cao hơn số lượng truy vấn chúng tôi cần hỗ trợ (khoảng 1.500/giây)

Cuối cùng tôi đặt mười triệu bản ghi từ 1,1 lên 10.1000000 và được truy vấn ngẫu nhiên cho một trong 10 triệu bản ghi. Hiệu suất là quá nóng tại 60 truy vấn mỗi giây và đĩa của tôi bị đập xung quanh như điên. Tôi cũng xác minh rằng nếu tôi yêu cầu một tập hợp con dữ liệu, hãy nói 1.000 bản ghi trong khoảng từ 3.000.000 đến 3,001,000, nó sẽ trả về từ từ lúc đầu và sau đó là bộ nhớ cache, tốc độ lên tới 20.000 truy vấn mỗi giây và đĩa của tôi ngừng phát điên.

Tôi đã đọc tất cả mọi người đang lưu trữ hàng tỷ hồ sơ ở Cassandra và lấy chúng ở mức 5-6k mỗi giây, nhưng tôi không thể đạt được bất kỳ nơi nào gần đó chỉ với hồ sơ 10mil. Bất kỳ ý tưởng những gì tôi đang làm sai? Có một số cài đặt tôi cần thay đổi từ các cài đặt mặc định không? Tôi đang trên một hộp Core i7 ép xung với 6gigs ram vì vậy tôi không nghĩ đó là máy.

Dưới đây là mã của tôi để lấy hồ sơ mà tôi đẻ trứng vào 8 chủ đề để hỏi cho một giá trị từ một cột qua hàng chính:

ColumnPath cp = new ColumnPath(); cp.Column_family = "Standard1"; cp.Column = utf8Encoding.GetBytes ("trang web"); phím chuỗi = (1 + sRand.Next (9)) + "." + (1 + sRand.Next (1000000)); CộtOrSuperColumn logline = client.get ("Keyspace1", khóa, cp, ConsistencyLevel.ONE);

Cảm ơn bạn vì bất kỳ thông tin chi tiết nào

Trả lời

-1

Dường như bạn chưa có đủ RAM để lưu trữ tất cả các bản ghi trong bộ nhớ.

Nếu bạn đổi sang đĩa thì bạn gặp sự cố và hiệu suất dự kiến ​​sẽ giảm đáng kể, đặc biệt nếu bạn đang đọc ngẫu nhiên.

Bạn cũng có thể thử điểm chuẩn một số lựa chọn thay thế phổ biến khác, như Redis hoặc VoltDB.

+0

Chúng tôi chắc chắn không thể phù hợp với tất cả chúng trong bộ nhớ, nhưng hồ sơ 10mil không có vẻ như rất nhiều. Mọi người đối phó với hàng tỷ hồ sơ như thế nào ?? –

+0

Điều quan trọng là giữ càng nhiều càng tốt trong RAM, không phải trên đĩa. Để xử lý hàng tỷ bản ghi bạn sẽ phân phối chúng trên nhiều máy và sử dụng chúng như một toàn thể. Đây là một bài viết rất hay [1] về cách thức này đạt được ở Riak, một giải pháp NoSQL phổ biến khác. Nhiều khía cạnh được thảo luận trong bài viết cũng áp dụng cho Cassandra, vì chúng được xây dựng trên cùng một ý tưởng cơ bản. [1]: https://wiki.basho.com/display/RIAK/An+Introduction+to+Riak –

4

đọc hoàn toàn ngẫu nhiên là về hành vi xấu nhất đối với bộ nhớ đệm mà hệ điều hành của bạn (và Cassandra nếu bạn thiết lập bộ đệm khóa hoặc hàng) cố gắng thực hiện.

nếu bạn nhìn vào contrib/py_stress trong phân phối nguồn Cassandra, nó có cấu hình stdev để thực hiện các lần đọc ngẫu nhiên nhưng với một số phím nóng hơn các phím khác. điều này sẽ đại diện cho hầu hết khối lượng công việc trong thế giới thực.

+0

Rất tiếc, chúng tôi sẽ có những khách truy cập ngẫu nhiên đến trang web của chúng tôi trong khoảng thời gian ngẫu nhiên - không có phân phối nào biết trước thời gian để có được nhiều lần truy cập bộ nhớ cache hơn. Chúng ta chỉ đơn giản giới hạn tốc độ đĩa trong trường hợp này? –

+0

Không có gì thực sự là ngẫu nhiên. Hiệu suất thực tế của bạn rất có thể sẽ tốt hơn so với các bài kiểm tra của bạn. Điều đó đang được nói, là Cassandra thực sự sử dụng hết bộ nhớ trên hộp? 60 lần đọc/giây là quá khủng khiếp trên phần cứng của bạn mà có thể bạn có vấn đề về thiết lập (tốt, tùy thuộc vào mức độ khủng khiếp của đĩa của bạn). Ngoài ra, đảm bảo Cassandra không sử dụng swap như thể nó là bộ nhớ vật lý - tạo ra một vấn đề về hiệu năng bệnh lý với cả Cassandra và hệ điều hành độc lập cố gắng tối ưu hóa các trang trong bộ nhớ theo cách cạnh tranh. –

3

Thêm các nút Cassandra khác và cung cấp cho chúng nhiều bộ nhớ (-Xms/-Xmx). Bạn càng có nhiều trường hợp Cassandra, dữ liệu sẽ được phân đoạn trên các nút và nhiều khả năng có trong bộ nhớ hoặc dễ dàng truy cập từ đĩa. Bạn sẽ rất hạn chế với việc cố gắng mở rộng một CPU loại máy trạm. Ngoài ra, hãy kiểm tra cài đặt -Xms/-Xmx mặc định. Tôi nghĩ mặc định là 1GB.

-6

VoltDB chắc chắn có thể xử lý mức hiệu suất đọc này cũng như ghi và vận hành bằng cụm máy chủ. Là một giải pháp trong bộ nhớ, bạn cần xây dựng một cụm đủ lớn để chứa tất cả dữ liệu của bạn trong RAM.

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