我们仍在为我们的数据存储评估 Cassandra。作为一个非常简单的测试,我在本地机器上的 Keyspace1/Standard1 列族中插入了 4 列的值,总计大约 100 字节的数据。然后我用行键尽可能快地读回来。我可以以 160,000/秒的速度读回它。伟大的。
然后我放入一百万个类似的记录,所有的键都以 XY 的形式出现,其中 X 在 (1..10) 中,Y 在 (1..100,000) 中,我查询了一条随机记录。性能下降到每秒 26,000 个查询。这仍然远高于我们需要支持的查询数量(大约 1,500/秒)
最后,我从 1.1 到 10.1000000 放入一千万条记录,并随机查询这 1000 万条记录中的一条。每秒 60 个查询的性能非常糟糕,我的磁盘像疯了一样颠簸。
我还验证了,如果我要求数据的子集,比如 3,000,000 到 3,001,000 之间的 1,000 条记录,它首先会缓慢返回,然后当它们缓存时,它的速度会高达每秒 20,000 次查询,并且我的磁盘不再发疯。
我读到过,人们在 Cassandra 中存储了数十亿条记录,并以每秒 5-6k 的速度获取它们,但只有 1000 万条记录,我无法接近这一点。知道我做错了什么吗?我需要更改默认设置吗?我在一个带有 6gigs ram 的超频 Core i7 盒子上,所以我不认为它是机器。
这是我获取记录的代码,我将这些记录生成到 8 个线程中,以通过行键从一列中请求一个值:
ColumnPath cp = new ColumnPath(); cp.Column_family = "标准1"; cp.Column = utf8Encoding.GetBytes("site"); 字符串键 = (1+sRand.Next(9)) + "." + (1+sRand.Next(1000000)); ColumnOrSuperColumn logline = client.get("Keyspace1", key, cp, ConsistencyLevel.ONE);
感谢您的任何见解