我想使用Cassandra来存储与会话相关的信息。我没有真正的HTTP会话 - 它是不同的协议,但是相同的概念。
Memcached会很好,但我想另外保留数据。
Cassandra设置:
Map<String,Set<String,String>>
)数据示例:
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},
}
在这种情况下,一致性不是问题,但性能可能是,尤其是磁盘IO。
由于我的会话中的数据时间很短,我想避免将其存储在硬盘上 - 除了提交日志。
我有一些问题:
谢谢你, 马切伊
答案 0 :(得分:4)
这就是我所做的 - 它运作良好:
gc_grace to 0
- 表示在第一次压缩时删除列。这很好,因为没有复制数据。在此设置中,将从memtable中读取数据,并且不会使用缓存。 Memtable可以分配足够的堆来保存我的数据,直到它过期甚至更长。
将数据刷新到SSTable后,压缩将立即删除过期的行,因为gc_grace=0
。
答案 1 :(得分:1)
考虑到你的用例如果我没有错,你希望你的所有键值[sessionID =&gt; sessionData]在内存中配对,这些值将每10分钟到期[意味着你不想要持久性]。
那么为什么你不能尝试像redis这样的内存商店。
来自Doc:
Redis是一个开源的高级键值存储。它通常被称为数据 结构服务器,因为键可以包含字符串,散列,列表,集和排序集。
由于你不需要复制redis主从架构甚至可能不会影响你
Redis也支持TTL
AFAIK cassandra适用于宽胖行[更多列少行]而不是瘦行[以前的转置]。你的用例似乎并非如此。
此致 泰米尔语