我有五个地图类型集合下表。 集合中的元素的最大数为12和该项目的最大大小为50个字节。
#
CREATE TABLE persons (
treeid int,
personid bigint,
birthdate text,
birthplace text,
clientnote text,
clientnoteisprivate boolean,
confidence int,
connections map<int, bigint>,
createddate timestamp,
deathdate text,
deathplace text,
familyrelations map<text, text>,
flags int,
gender text,
givenname text,
identifiers map<int, text>,
issues int,
media map<uuid, int>,
mergedpersonas map<int, bigint>,
note text,
primaryphotoid uuid,
quality int,
suffix text,
surname text,
userid uuid,
vitalstatus int,
PRIMARY KEY (treed,personid)
)
在这里我的分区键是treeid和独特的关键是PERSONID。 我试图将记录插入到该表中使用的datastax .NET司机.NET应用程序。 我有大约200K记录插入和性能下降(超出200毫秒/ OP)作为插入的记录数量的增加。 从OpsCenter我看到帕新的垃圾收集时间增加(超出20毫秒)作为被插入的记录。
#
现在,如果我改变与像PRIMARY KEY不同的主键的表(PERSONID,treeid)和做同样的插入,性能要好得多(低于1毫秒/ OP)和垃圾收集时间远低于1毫秒
#
那么,为什么是分区键,使这里的性能差异? 我与treeid其他表,PERSONID作为主键但任何地图数据的类型和他们的表现非常好。 我想进行基于treeid查询,我应该如何能做到这一点? 我应该把地图分成不同的表? 或创建在treeid柱辅助索引? 什么阅读更有效率?
我使用datastax企业4.0.1。 卡桑德拉2.0.5。 我在CentOS 6.4和3复制因子的三个节点群集