我有一个关于设计的挑战,我有选择在我的卡桑德拉桌子上。这是在生产上运行的。但最近我观察到以下问题。
(这里的表名和列是为了便于讨论)
create table items (listid int,
itemid int,
datatime timestamp,
dist int,
primary key ((listid, itemid), datatime));
row#1 (1, 101, 1583213040000, 50)
row#2 (1, 101, 1583213046000, 55)
row#3 (1, 101, 1583213046000, 40)
row#4 (1, 101, 1583213050000, 70)
row#1 (1, 101, 1583213040000, 50)
row#3 (1, 101, 1583213046000, 40)
row#4 (1, 101, 1583213050000, 70)
我的问题是,有人能在不改变Datamodel设计的情况下提出解决方案吗?
正如您所说的,可以在集群键中包含该值,但不重写条目的最佳方法是确保集群键是唯一的。实现这一点的一种方法是使用基于时间的UUID,而不是时间戳。这样,当读取时,您还可以从UUID中提取时间戳,并且您的列将被排序。或者,您可以添加另一列,在其中添加一个小的随机字符串,以避免冲突,读取时可以忽略冲突。
卡桑德拉有一张桌子 如何在“排序”列中添加聚类键。不重新创建表
我有一个由4个节点组成的Cassandra(2.2.1)集群,由Java客户端应用程序使用。复制因子为3,读写的一致性级别为LOCAL_QUORUM。每个节点大约有5 GB的数据。请求量约为每秒2-4k。几乎没有删除操作,因此创建了少量的墓碑。 一段时间前,我注意到读写性能很差,而且随着时间的推移,性能越来越差——集群变得非常慢。读取(通常)和写入超时已变得非常频繁。硬件不应该引起问题,部署集群的
命令在rest两个节点上运行,一切正常。当我想跑的时候 nodetool状态 命令时,我得到了这个错误消息
目前情况: 我通过执行以下命令创建了一个新的Cassandra映像“Cassandra”和一个名为“container-node”的容器: Docker pull Cassandra Docker images grep Cassandra Docker run-d--name cassandra-node--publish 9042:9042 cassandra 连接到容器:docker exe
我有两个集群-1。Cloudera Hadoop-Spark作业在这里运行2。云-卡桑德拉星团,多DC 在编写从spark作业到cassandra集群的dataframe时,我在编写之前在spark中进行了重新分区(repartioncount=10)。见下文: 在我的多租户spark集群中,对于一个有20M记录的spark批加载,以及以下配置,我看到了很多任务失败、资源抢占和动态失败。 PS:我