Cassandra 用昆德拉ORM写卡桑德拉的表演

Cassandra 用昆德拉ORM写卡桑德拉的表演,cassandra,throughput,database,nosql,Cassandra,Throughput,Database,Nosql,我正在设计一个应用程序,它将接受来自面向客户的系统的数据/事件,并将这些数据/事件持久化以供审核,并作为源来重播消息,以防下游系统需要在任何数据馈送中进行更正 我不打算在下游系统中对这些数据进行太多分析。但我希望能持久保存这些数据,并让我运行临时查询 我的系统的几个特点 1 99%写入-1%读取 2高写入吞吐量每秒大约30000个事件,每个事件中大约有100个属性 3.数据的动态性质。无法符合固定架构 这些特性使我认为ApacheCassandra是一个选项,可以使用widerow特性或map来

我正在设计一个应用程序,它将接受来自面向客户的系统的数据/事件,并将这些数据/事件持久化以供审核,并作为源来重播消息,以防下游系统需要在任何数据馈送中进行更正

我不打算在下游系统中对这些数据进行太多分析。但我希望能持久保存这些数据,并让我运行临时查询

我的系统的几个特点

1 99%写入-1%读取 2高写入吞吐量每秒大约30000个事件,每个事件中大约有100个属性 3.数据的动态性质。无法符合固定架构

这些特性使我认为ApacheCassandra是一个选项,可以使用widerow特性或map来存储我的属性

我使用单节点和昆德拉ORM编写了几个示例来将事件写入映射,并获得每秒1500个事件/线程的最大写入吞吐量。我可以用更多的线程和cassandra节点来扩展它


但是,这与我从你的经历中应该得到的接近吗?网络上可用的基准测试很少令人困惑。。我使用的是cassandra 2.0和Kundra ORM 2.13

你试过使用cassandra.yaml和cassandra-env.sh吗?优化节点群集对于优化性能非常重要,您可能还需要查看操作系统参数,还需要确保交换内存为0。这帮助我提高了集群性能

您的Cassandra数据模型似乎过度使用了映射集合类型。如果这回答了您对数据动态性质的担忧。无法符合固定模式。还有其他方法

创建表用户\u事件事件\u时间timeuuid主键、属性映射、会话\u令牌文本、状态文本、系统文本、用户文本

属性列中存储的键值对似乎是事件的实际有效负载。因此,它们应该是分区中的行,使用映射的键作为集群键

CREATE TABLE user_events(
     event_time TIMEUUID,
     session_token TEXT STATIC,
     state TEXT STATIC,
     system TEXT STATIC,
     USER TEXT STATIC,
     attribute TEXT,
     value TEXT,
     PRIMARY KEY(event_time, attribute)
);
这使得event_time和attribute成为主键的一部分,event_time是分区键,attribute是集群键


静态部分生成事件的这些数据属性,每个分区只存储一次。

我很难提供答案,因为您的问题非常模糊和不清楚,而且我们不知道数据模型是什么样子。感谢您的回复。我想看看,我的方向是否正确1500次写入/线程/节点看起来是真实的。我不是专家,所以我会让其他人发布真实的答案,但确定1500次限制来自Cassandra或您的ORM/应用程序吗?谢谢您的回复。我想看看,我的方向正确吗?1500次写入/线程/节点看起来是真的吗?我期待的更多吗。数据模型是一个简单的平面表,只有很少的列,其余是一个属性映射,我写了大约100个属性到这个映射创建表用户事件事件时间标识主键,属性映射,会话令牌文本,状态文本,系统文本,用户文本感谢Cedric,通过1使用datastax java驱动程序2批量执行3调整配置,我能够在吞吐量上获得更多的改进。我可以做大约2500个操作插入。我正在尝试你在这里提到的宽行方法。如果我继续这样做,我是否丢失了有关数据类型的完整信息?[我也同意map的观点],但当我们说Cassandra允许动态列时,是否允许我将列添加到保留数据类型的列族中?。使用比较器和验证器实现这一点有什么想法吗?