Tôi muốn sử dụng Cassandra để lưu trữ thông tin liên quan đến phiên. Tôi không có phiên HTTP thực - đó là giao thức khác nhau, nhưng cùng một khái niệm.Cassandra là cửa hàng phiên dưới tải nặng
Memcached sẽ ổn, nhưng tôi muốn tiếp tục lưu giữ dữ liệu.
Cassandra thiết lập:
- phi nhân rộng không gian chính
- Family Cột duy nhất, nơi quan trọng là session ID và mỗi cột trong các cửa hàng hàng phím duy nhất/giá trị - (
Map<String,Set<String,String>>
) - cột TTL = 10 phút
- ghi CL = ONE
- đọc CL = ONE
- 2.000 viết/s
- 5,000 lần đọc/s dụ
dữ liệu:
session1:{ // CF row key
{prop1:val1, TTL:10 min},
{prop2:val2, TTL:10 min},
.....
{propXXX:val3, TTL:10 min}
},
session2:{ // CF row key
{prop1:val1, TTL:10 min},
{prop2:val2, TTL:10 min},
},
......
sessionXXXX:{ // CF row key
{prop1:val1, TTL:10 min},
{prop2:val2, TTL:10 min},
}
Trong trường hợp này nhất quán không phải là một vấn đề, nhưng hiệu suất có thể, đặc biệt là đĩa IO.
Vì dữ liệu trong phiên của tôi xuất hiện trong một thời gian ngắn, tôi muốn tránh lưu trữ trên ổ đĩa cứng - ngoại trừ nhật ký cam kết.
Tôi có một số câu hỏi sau:
- Nếu cột sẽ hết hạn vào Memtable trước khi xả nước nó để SSTable, sẽ Cassandra nào lưu trữ cột như vậy trong SSTable (tuôn ra nó vào HDD)?
- Sao chép bị vô hiệu hóa cho Không gian khóa của tôi, trong trường hợp này lưu trữ cột đã hết hạn trong SSTable sẽ không cần thiết, phải không?
- Mỗi mũ CF tối đa 10 cột. Trong trường hợp này, tôi sẽ bật bộ nhớ cache hàng và tắt bộ đệm khóa. Nhưng tôi hy vọng dữ liệu của tôi vẫn là có sẵn trong Memtable, trong trường hợp này tôi có thể tắt toàn bộ bộ nhớ cache, đúng không?
- Bất kỳ gợi ý cấu hình Cassandra đối với trường hợp phiên lưu trữ sử dụng như vậy sẽ được thực sự đánh giá cao :)
Cảm ơn bạn, Maciej
bạn nói bạn muốn lưu dữ liệu, nhưng cũng muốn TTL sau 10 phút. – sdolgy
Đây là quá trình quan trọng và tôi muốn đảm bảo rằng không phá vỡ –