想象一下,您的要求是您有 3 个巨大的表(结构化数据),每个表有 300 亿行(总大小为 4TB),并且您的许多并发用户(它们是远程 LAN 机器上的并行操作系统线程)将需要读取其中的一部分通过他们的 SELELCT WHERE GROUPBY 查询和高度并发的数据,比如同时进行 10,000 次并发读取,并且用户需要将数据插入(不更新)高度并发的这些表中,就像 2000 个并发写入器(遍布数据中心 LAN 网络) . 用户希望从该存储中尽可能快地读取和插入,其中每次读取和写入将发生在 ms 到 1 秒的范围内。
你推荐什么技术来满足这样的要求?是否有任何数据存储或键值存储可以做到这一点?云不是一种选择。
一些说明:
用户不必立即看到数据,最终一致性是可以接受的。数据是通过存储可以提供的任何驱动程序访问的,用户再次只是在数据中心的远程机器上运行的线程。查询大多类似于 SELECT WHERE GROUPBY。
数据采用表格格式,每行约 60 字节。
没有云选项,我无法使用 DynamoDB 或类似的解决方案。我必须能够在数据中心内部托管它。
表的所有数据都可以随时读取,使用模式不可预测。没有连接或超长查询。不需要 DR,但需要合理的 HA,但不一定非得花哨。每个读者都会根据其 where 子句获取一批行,而这些行并不真正相关。我们可能可以为每一行设置固定长度,但我希望存储层会担心它。
此外,我最担心的是所有那些与并发读取同时发生的并发写入。
非常感谢您对此的见解。
更重要的是,我有三个这样的表,每 300 亿行包含不同的对象类型
如果最终一致性是可以接受的并且您的所有查询都是聚合的,那么低延迟的 OLAP 系统可能适合您。您的要求听起来有点像算法交易平台。这种类型的架构通常用于需要对最新数据进行聚合统计分析计算的交易大厅系统。
如果您可以按日期对数据进行分区并且旧行不会得到更新,那么您可以使用传统的 OLAP 服务器构建混合 OLAP 系统,例如由普通 RDBMS 平台支持的 Microsoft Analysis 服务。应该可以处理大约 4TB 的数据,并且 SQL Server 和 SSAS 都将执行共享磁盘集群。其他供应商也提供类似的 OLAP 系统(例如 Oracle/Hyperion Essbase)。
OLAP 服务器通过将数据与聚合一起保存在本地存储中来工作。大多数将支持分区数据。此外,大多数也将在 ROLAP 模式下工作,在这种模式下它们对底层数据库发出查询。需要注意的重要一点是,存储策略可以在每个分区的基础上进行管理,您可以通过编程将分区从一个分区切换到另一个分区,
在这个模型中,历史数据存储在 MOLAP 分区中,数据的聚合也被持久化。如果可以从聚合中满足查询,则服务器将使用它们。可以调整聚合以适应查询,正确的聚合将大大减少解析查询所需的计算量。这种类型的系统可以实现非常灵敏的聚合查询。
实时数据可以通过维护一个小的前导分区来实现——如有必要,可以针对当前月、日甚至小时。OLAP 服务器将对数据库发出查询;如果这个分区足够小,DBMS 将能够快速响应。一个常规进程创建新的前导分区并将关闭的历史周期转换为 MOLAP。可以合并较旧的分区,从而允许以任何所需的粒度管理历史数据。
写入数据库的客户端直接写出底层 RDBMS。如果历史数据保持静态,它们将只写入前导分区。如果您需要额外的 DBMS 性能,4TB 是使用 SSD 的实用卷。即使是主流供应商也有基于 SSD 的产品,可以选择更快的 SLC 单元。