我需要每天向cassandra插入60GB的数据。
这分解为
100套钥匙
每套150,000个键
每个密钥4KB的数据
就写作表现而言,我最好使用
每组1排,每排150,000个键
每组10行,每行15,000个键
每组100行,每行1,500个键
每组1000行,每行150个密钥
要考虑的另一个变量,我的数据在24小时后到期,所以我使用TTL = 86400来自动过期
有关我的配置的更多具体细节:
CREATE TABLE stuff (
stuff_id text,
stuff_column text,
value blob,
PRIMARY KEY (stuff_id, stuff_column)
) WITH COMPACT STORAGE AND
bloom_filter_fp_chance=0.100000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=39600 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
compaction={'tombstone_compaction_interval': '43200', 'class': 'LeveledCompactionStrategy'} AND
compression={'sstable_compression': 'SnappyCompressor'};
访问模式详细信息:
4KB值是一组1000个4字节的浮点数打包成一个字符串。
典型的请求需要随机选择20到60个浮点数。
最初,这些浮点数都存储在同一逻辑行和列中。这里的逻辑行表示在给定时间的一组数据,如果它全部写入具有150,000列的一行。
随着时间的推移,一些数据被更新,在列组中的逻辑行内,将更新打包字符串中的一组随机级别。新级别不是就地更新,而是写入与其他新数据相结合的新逻辑行,以避免重写仍然有效的所有数据。这会导致碎片化,因为现在需要访问多行来检索该组20-60个值。现在,请求通常会在1-5个不同的行中从同一列读取。
测试方法 我为每个配置编写了5个随机数据样本并对结果进行了平均。费率计算为(Bytes_written /(时间* 10 ^ 6))。以毫秒精度测量时间,以秒为单位。 Pycassa被用作Cassandra界面。使用Pycassa批量插入操作符。每个插入插入多个列到一行,插入大小限制为12 MB。队列刷新为12MB或更少。大小不考虑行和列开销,只考虑数据。数据源和数据接收器位于不同系统的同一网络上。
撰写结果
请记住,由于Cassandra配置的复杂性,还有许多其他变量在起作用
1行每行150,000个密钥:14 MBps
每行10行15,000个键:15 MBps
每行100行1,500个键:18 MBps
每行1000行150个密钥:11 MBps
答案 0 :(得分:3)
答案取决于您的数据检索模式是什么,以及您的数据在逻辑上如何分组。从广义上讲,这就是我的想法:
我建议,分析一下您的数据访问模式,并根据它来最终确定您的数据模型,而不是相反。
答案 1 :(得分:0)
最好每组使用 1行,每行150,000列。使用TTL最好有一个自动清洁过程。