我一直在与卡桑德拉和我已经打了一下一个绊脚石。对于我是多么需要在数据搜索,我发现一个复合主键我需要什么,而是在此列家庭记录插入的时间去与它的狗的伟大工程,我不完全知道为什么。缓慢插入时间与复合主键在卡桑德拉
表定义:
CREATE TABLE exampletable (
clientid int,
filledday int,
filledtime bigint,
id uuid,
...etc...
PRIMARY KEY (clientid, filledday, filledtime, id)
);
的clientid =客户端的内部ID。 filledday =自1/1/1900以来的天数。 filledtime =记录被收回当天的滴答数。 id =一个Guid。
的日期和时间结构的存在是因为我需要能够白天方便,快捷地进行筛选。
我知道有复合主键完全不同卡桑德拉商店列族。从我的理解它会保存一切,离主键的主要成分的基行的新列。这是插入缓慢的原因吗?当我说慢我的意思是,如果我只是在ID上的主键插入将需要约200毫秒,并与复合主键(或任何其子集,我只是clientid和ID试图相同的效果),它会采取1000条记录超过32秒。选择时间快于复合键表,因为我必须应用二级索引并使用'ALLOW FILTERING'以便用标准键表获得正确的记录(我知道我可以在代码中执行此操作,但问题是我正在处理一些海量的数据集,并不总是实际或可能的)。
难道我宣布柱族或主键错了什么,我想干什么?对于所有未列出的非主键列,该表的列宽为37列,这是否会成为问题?我很困惑这一点。我无法真正找到其他有类似问题的人。
对于查询的一个例子,我需要能够做的事情一样得到以下几点:1)获取一个客户记录每天 2)获取记录的日期和时间的客户端。 我正在使用填满和填充时间主要是因为我的代码库是.Net,并没有建立在timeuuids的功能。我现在有一些东西,所以我给他们一个尝试。我现在看到这个问题的方式是我需要找到一个关键结构,它可以让我在不了解客户和时间的情况下完成这些查询,但仍然可以将数据分开以便不会使插入变慢。注意:数据集非常大。 – Bozarth
我建议使用我上面提出的结构,并使用[.NET客户端,如fluentcassandra](https://github.com/fluentcassandra/fluentcassandra)来使用TimeUUID。 为了避免热点可以很容易地只添加一个随机整数(从预定义的范围等0-9),并形成像这样的复合分区键: 'CREATE TABLE exampletable( 的clientid INT, 桶,整数 ID timeuuid , ... PRIMARY KEY((客户端ID,桶),ID) );' 'SELECT * FROM exampletable其中的clientid = 123和铲斗IN(0,1,2,3,4,5,6 ,7,8,9)和ts> minTimeuuid('2013-06-18 00:00:01')和ts
omnibear