2011-12-06 39 views
6

Tôi mới sử dụng NoSQL và Cassandra. Tôi đang thử nghiệm với các thiết lập để đạt được một giải pháp duy nhất trong bộ nhớ cache chỉ. Tôi đang xử lý bằng cách đọc từng dòng từ một tệp 100000 dòng và sử dụng Hector để chèn vào Cassandra. Tôi nhận thấy một thông lượng rất thấp khoảng 6000 lần chèn mỗi giây. Toàn bộ hoạt động viết khoảng 20,5 giây không thể chấp nhận đối với ứng dụng của chúng tôi. Chúng tôi cần một cái gì đó giống như 100000 chèn mỗi giây. Tôi đang thử nghiệm trên một máy tính Windows 7 với RAM 4GB.Hiệu suất ghi thấp của Cassandra

Tôi đang thực hiện kiểm tra chỉ chèn.

Vui lòng cho tôi biết nơi tôi đang gặp sự cố. Vui lòng đề xuất cách tôi có thể cải thiện số lần chèn mỗi giây.

Keyspace: Keyspace1 
     Read Count: 0 
     Read Latency: NaN ms. 
     Write Count: 177042 
     Write Latency: 0.003106884242157228 ms. 
     Pending Tasks: 0 
       Column Family: user 
       SSTable count: 3 
       Space used (live): 17691 
       Space used (total): 17691 
       Number of Keys (estimate): 384 
       Memtable Columns Count: 100000 
       Memtable Data Size: 96082090 
       Memtable Switch Count: 1 
       Read Count: 0 
       Read Latency: NaN ms. 
       Write Count: 177042 
       Write Latency: NaN ms. 
       Pending Tasks: 0 
       Key cache capacity: 150000 
       Key cache size: 0 
       Key cache hit rate: NaN 
       Row cache capacity: 150000 
       Row cache size: 0 
       Row cache hit rate: NaN 
       Compacted row minimum size: 73 
       Compacted row maximum size: 924 
       Compacted row mean size: 784 

Tôi đã thử vài phương pháp để thiết lập bộ nhớ cache và bộ nhớ cache hàng chính:

  1. Qua Cassandra CLI

  2. Qua NodeCmd: java org.apache.cassandra.tools.NodeCmd - p 7199 setcachecapacity Người dùng Keyspace1 150000 150000

+0

Bạn đang sử dụng loại bộ nhớ đĩa nào? Đây có phải là ổ SSD hoặc HDD hoặc hệ thống tệp bộ nhớ không? Bao nhiêu CPU người dùng/hệ thống là ứng dụng của bạn sử dụng khi điều này đang chạy? (trong Trình quản lý Tác vụ) –

+0

Ổ đĩa lưu trữ là Đĩa cứng. Tổng CPU là khoảng 40%. –

+2

Khi chúng tôi thực hiện một số thử nghiệm một năm trước, chúng tôi thấy Cassandra chậm hơn PostgreSQL cho đến khi Cassie có hơn 4 máy chủ. Vì vậy, tôi không ngạc nhiên. –

Trả lời

8

Có bao nhiêu chủ đề/quá trình es bạn đang sử dụng để thực hiện chèn? Cuộc gọi Hector đồng bộ, vì vậy nếu bạn chỉ sử dụng 1 luồng ở phía máy khách, đó có thể là nút cổ chai của bạn.

+0

Tôi chỉ đang sử dụng một chuỗi. Tôi sẽ thử với nhiều chủ đề. –

9

Tôi sẽ không mô tả 6000 lần viết mỗi giây là "chậm" - nhưng Cassandra có thể làm tốt hơn nhiều. Nhưng lưu ý rằng Cassandra được thiết kế để ghi bền, vì vậy có thể cho hiệu năng thấp hơn so với các giải pháp bộ nhớ đệm chỉ dành cho bộ nhớ.

Như sbridges nói, bạn không thể có được hiệu suất đầy đủ ra khỏi Cassandra sử dụng một khách hàng duy nhất. Hãy thử sử dụng nhiều chủ đề khách hàng, hoặc các quy trình hoặc máy móc.

Tôi không nghĩ rằng bạn sẽ nhận được 100.000 lượt viết mỗi giây trên một nút duy nhất. Tôi chỉ thu được khoảng 20.000-25.000 lần viết mỗi giây trên phần cứng khiêm tốn (mặc dù Cassandra đã nhanh hơn đáng kể kể từ khi tôi làm điểm chuẩn đó). 6000 mỗi giây có vẻ đúng cho một khách hàng duy nhất đối với một nút hàng hóa duy nhất.

Với một cụm nút, bạn chắc chắn có thể nhận được 100.000 mỗi giây (Xem http://techblog.netflix.com/2011/11/benchmarking-cassandra-scalability-on.html cho một chuẩn mực mới là 1.000.000 viết mỗi giây!)

Row bộ nhớ cache và bộ nhớ cache chính là để giúp đọc hiệu suất, không ghi hiệu suất.

Ngoài ra, hãy chắc chắn rằng bạn đang tạo đợt ghi (nếu thích hợp) - điều này sẽ làm giảm chi phí mạng.

+0

Chèn hàng loạt tăng rất nhiều hiệu suất. Tôi đã vượt qua từ 5k chèn/giây đến 20-25k chèn/giây. Tôi có 3 nút. 6 cpu với 32 gb ram – davidlebr1