高并发存储系统

iCo*_*ode 12 nosql storage concurrency architecture

想象一下您的需求是您有 3 个巨大的表(结构化数据),每个表中有 300 亿行(总大小为 4TB),并且您的许多并发用户(它们是远程 LAN 机器上的并行操作系统线程)需要读取一部分数据通过他们的 SELELCT WHERE GROUPBY 查询和高并发,比如 10,000 次并发读取,同时用户也需要将(无更新)数据插入到这些表中,高并发也像 2000 个并发写入者(遍布数据中心 LAN 网络) . 用户希望从这个存储中尽可能快地读取和插入,每次读取和写入将发生在 ms 到 1 秒的范围内。

你推荐什么技术来满足这样的要求?是否有任何数据存储或键值存储可以做到这一点?云不是一种选择。

一些说明:

用户不必立即查看数据,最终的一致性是可以接受的。数据是通过存储可以提供的任何驱动程序访问的,用户再次只是在数据中心的远程机器上运行的线程。查询大多类似于 SELECT WHERE GROUPBY。

数据为表格格式,每行约 60 个字节。

没有云选项,我不能使用 DynamoDB 或类似的解决方案。我必须能够在数据中心内部托管它。

表的所​​有数据都可以随时读取,使用模式不可预测。没有连接或超长查询。不需要 DR,但需要合理的 HA,但不必太花哨。每个读者都根据它的 where 子句获得一批行,而行并不真正相关。我们可能可以为每一行设置固定长度,但我希望存储层会担心它。

此外,我最关心的是并发读取时发生的所有并发写入。

非常感谢您对此的见解。

更重要的是,我有三个这样的表,每 300 亿行包含不同的对象类型

Con*_*lls 6

如果最终的一致性是可以接受的并且您的所有查询都是聚合的,那么低延迟 OLAP 系统可能适合您。您的要求听起来有点像算法交易平台。这种类型的架构通常用于需要对最新数据进行汇总统计分析计算的交易大厅系统。

如果您可以按日期对数据进行分区并且旧行不会更新,那么您可以使用传统的 OLAP 服务器(例如由普通 RDBMS 平台支持的 Microsoft 分析服务)构建混合 OLAP 系统。应该可以让它处理大约 4TB 的数据,并且 SQL Server 和 SSAS 都将执行共享磁盘集群。类似的 OLAP 系统(例如 Oracle/Hyperion Essbase)可从其他供应商处获得。

OLAP 服务器通过将数据与聚合一起保存在本机存储中来工作。大多数将支持分区数据。此外,大多数还将在 ROLAP 模式下工作,在这种模式下它们针对底层数据库发出查询。需要注意的重要一点是,可以在每个分区的基础上管理存储策略,并且您可以通过编程方式将一个分区从一个分区切换到另一个分区,

在此模型中,历史数据存储在 MOLAP 分区中,同时也保留了数据聚合。如果可以从聚合中满足查询,则服务器将使用它们。可以调整聚合以适应查询,正确的聚合将显着减少解析查询所需的计算量。这种类型的系统可以实现非常灵敏的聚合查询。

实时数据可以通过维护一个小的前导分区来实现——如果需要的话,可以是当前的月、日甚至小时。OLAP 服务器将对数据库发出查询;如果这个分区足够小,DBMS 将能够快速响应。常规流程会创建新的前导分区并将关闭的历史时段转换为 MOLAP。可以合并较旧的分区,允许以任何所需的粒度管理历史数据。

写入数据库的客户端只是直接写出底层 RDBMS。如果历史数据保持静态,它们将只写入前导分区。如果您需要额外的 DBMS 性能,4TB 是使用 SSD 的实用容量。即使是主流供应商也有基于 SSD 的产品,可以选择更快的 SLC 单元。