关闭。这个问题是基于意见的。它目前不接受答案。
**想改进这个问题吗?**更新这个问题,这样就可以通过编辑这篇文章用事实和引文来回答。
去年关门了。
改进这个问题
我需要你的帮助,以验证数据库是否适合我的使用情况。
用例
我的团队正在构建一个通用的实时聚合平台,它需要:
从Kafka的许多主题中加入数据
连接需要在原始数据上完成
主题具有相同的键
主题中的数据有时是“快照”(可更新),有时是“事件”(不可更新)
连接数据的目的地将是一些分析olap数据库。点击房子,Druid等,视情况而定。这些系统与“delta”(scd)一起工作。因为“快照”,我需要有状态处理。
快照的更新最多可在7天后出现
主题接收速度约为20k msg/s,峰值可达200k msg/s
topics中的数据是从100字节到5kb的json
主题中的数据可以重复
使用“version”json字段消除重复,这是每个主题的一部分。仅当新版本>旧版本时才应处理数据。或者旧版本不存在。
我已经和Cassandra有了一个五阶段的poc:
Cassandra插入器-消费所有Kafka主题。只对同一个cassandra表中的所有主题执行insert。切分是在列上进行的,列的关键是所有Kafka主题。所以所有具有相同密钥的消息最终都会出现在同一个shard中。
每一个Cassandra插入一个插入是生产Kafka
增量计算器-通过切分键使用插入事件和查询cassandra。获取所有原始数据,然后进行重复数据消除并创建增量。状态保存在另一个cassandra集群中。通过保存所有已处理的“版本”。下次出现新的插入事件时,我们将使用保存的状态“version”只获取两个事件:previous和current,这样就可以创建一个deltaevent
三角叶产于Kafka
clickhouse/druid接收数据
所以它基本上是一个50/50的插入/读取工作负载,没有对cassandra的更新。
它有14个cassandra数据节点和8个状态节点,工作正常,最高可达20k insertevent/s。使用25k insertevent/s时,系统开始滞后。节点有16gbram,磁盘是由ssd支持的网络存储(我知道这并不理想,但现在无法更改)。网络10 gbit。
重新思考DB理念
我想做一个新的poc来尝试使用changefeeds创建delta和重复数据消除。为此,我将使用一张table。主键/分片键将是kafka键,来自具有相同键的所有主题的所有kafka数据将加入/插入到单个文档中。
工作量可能是10/90插入/更新。我会使用squash:true,以避免过度读取并减少三角形事件的数量。
你认为这是一个很好的重新思考DB的用例吗?
它是否可以扩展到200k msg/s,即20k insert/s、180k updates/s和150k/reads?
我需要删除超过7天的数据,这将如何影响插入/更新/查询工作负载?
您是否有一个更适合这个用例的系统方案?
多谢了,达沃
ps:如果你喜欢阅读一个文档,这里是:RejectDB用例问题。
1条答案
按热度按时间tjrkku2a1#
imho,rehinkdb非常适合您的用例。
来自DB文档
…可扩展到每秒执行130万次单个读取。。。ReinspectDB在50:50的读/写混合工作负载中每秒执行10万次以上的操作—同时在完整的持久性和数据完整性保证级别上。。。在一系列集群大小上执行所有基准测试,从一个节点扩展到16个节点。
RejectDB的人员使用ycsb基准测试套件中的工作负载测试了类似的场景,并报告了他们的结果。
我们发现,在一个混合读/写工作负载中,具有两个服务器的reinspectdb能够每秒执行近16k个查询(qps),并且在16节点集群中扩展到近120k个qps。在只读工作负载和同步读取设置下,RefresheintDB能够从单个节点上的大约150k qps扩展到16个节点上的超过550k qps。在相同的工作负载下,在异步的“过时的读取”设置中,reinspectdb从一台服务器上的150k qps增加到16节点集群中的1.3m。
选择工作负载和硬件
…在ycsb工作负载选项中,我们选择运行工作负载a,其中包含50%的读取和50%的更新操作,以及执行严格的读取操作的工作负载c。ycsb测试存储的所有文档都包含10个字段,其中随机的100字节字符串作为值,每个文档的大小总计约为1KB。
考虑到跨多个示例扩展reinspectdb集群的方便性,我们认为有必要在从单个reinspectdb示例移动到更大的集群时观察性能。我们以不同的集群大小增量在一个16节点的集群上测试了所有的工作负载。
另外,我建议你仔细阅读一下数据库的限制。我在这里复制了一些。
有64个碎片的硬限制。
虽然对单个文档的大小没有硬限制,但出于内存性能的考虑,建议限制为16mb。
json查询的最大大小是64m。
主键限制为127个字符。
辅助索引不存储对象或空值。
主键字符串不能包含空代码点(
U+0000
).默认情况下,DB服务器上的数组的大小限制为100000个元素。通过运行arraylimit(或array\u limit)选项,可以对每个查询进行更改。
RejectDB不支持unicode排序规则,并且不规范具有多个代码点的相同字符(即,
\u0065\u0301
以及\u00e9
两者都代表人物”é” 但是,他们对待他们,并将他们分类为,不同的字符)。由于您的系统是实时系统,因此重新考虑数据库内存需求和崩溃恢复也值得一读。
此外,还缺少delete性能基准。