01
先谈 NoSQL 数据库
在这样的数据规模下,压缩率即使是 50%,也需要 100TB 的空间。而这样的空间规模,通常都需要 10 个节点以上的 NoSQL 集群(用 Redis 的话就更可怕了,需要内存 100TB 的集群)。这个结论的底层原理,就在于 NoSQL 是使用非结构化的方式来存储结构化数据的,这种模式导致了压缩效果差、存储成本高、节点规模大的劣势。
02
再谈 MySQL/PostgreSQL
再者,MySQL 的横向扩展只能靠中间件来实现,没有更好的方式了,这种分布式的横向扩展能力也为其打了个折扣。正是基于此,PostgreSQL 才会单独出了一个分支来存储时序数据。
03
接下来谈 HBase
存储率不高:因为 HBase 里用了 Byte 的类型,以 Column Family 为单位做列存,因此压缩率也上不去。但是比 NoSQL 好一些。
运维复杂:用 HBase 就得先上 HDFS/ZooKeeper/MR 这一系列组件,安装运维就是个问题。本来只是为了存储数据,结果倒腾起大数据的组件来了。
计算慢:哪怕是 OpenTSDB 这个基于 HBase 做的时序数据库(Time Series Database),在做一些常见的降采样、排序计算、时间段检索上,都不是特别快。其背后的问题还是在于 HBase 节点本身不提供时序的计算函数,因此查询时都得汇聚到 1 个OpenTSDB 节点来进行,并发度很有限并且会消耗大量的网络 IO 成本。
综上所述,HBase 也并非很适应车联网场景。
04
最后谈 TDengine
所有采集的数据都是时序的 —— 就只处理时序数据
数据都是结构化的 —— 结构化是所有优化的第一切入点
每个数据流的数据源是唯一的 —— 在写入过程中不用过分考虑随机写入
数据少有更新或单条删除操作 —— 选择数据结构的重要依据
数据一般是按到期日期来删除的 —— 自动淘汰数据是长久运维的必需品
数据要优先保证写入操作,读操作为辅 —— 写入吞吐量是第一指标
数据流量平稳,可以较为准确的计算 —— 不像 MySQL 的业务场景,压力基本可预测
数据一定是指定时间段和指定区域查找的 —— 查询优化的主要入手点
数据多有统计、聚合等实时计算操作 —— 提供时序独有的函数
数据量巨大,一天的数据量就超过100亿条 —— 针对性的压缩率、横向扩展架构
从上述时序数据特点出发,TDengine 打造了以下的创新技术点:
创建一个设备一张表、超级表,压缩率达到到 10% 的级别
行式存储 + 列式存储,进一步提升压缩率
LSM Tree 结构的引擎,SkipList 的 MemTable
Union all + tag 的超级表语法糖
降采样/状态窗口/会话窗口函数
作为时序数据库引擎,TDengine 不需要基于 Hadoop 生态搭建,也不需要拼装 Kafka、Redis、HBase 等诸多组件,它将数据处理中的缓存、消息队列、数据库、流式计算等功能都统一在了一起,这样轻量级的设计不仅让它的安装包很小、对集群资源消耗很少,同时也在一定程度上降低了研发、运维成本,因为需要集成的开源组件少,因而系统可以更加健壮,也更容易保证数据的一致性。
下面延伸一个话题,分享一下我总结的数据库选型原则,以此帮助大家更好地进行数据库选型。
讲讲数据库选型原则
如果是事务的:
单机扛得住的,MySQL/PG 都可以选择
单机扛不住,但是好分片的,同上一条
不好分片,那可以考虑 TiDB 这种分布式事务的 HTAP
对于非事务,基本上就是各种 MPP 型的 OLAP:
多维分析为主,不知道自己什么已知维度的分析,就用 ClickHouse/Doris 这种通用的 OLAP
有场景特色的,就选场景通用的,例如 TDengine 做时序场景,Neo4j 做图计算
分布式数据库,看几点:
Sharding + Partition 策略:这一点基本上决定了性能的上下限
分布式架构:这一点影响系统的容量上限/瓶颈模块
-
计 算函数: 这一点决定好不好用,能不能减轻业务开发的工作量。 不然都只有读写没计算,啥计算都自己写 肯定是不合适的。
结语
END
往期推荐
👇 点击阅读原文,快速体验 TDengine 3.0 !
本文分享自微信公众号 - TDengine(taosdata_news)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。