一个生产者对象不断产生数据,并对生产的数据进行持续追加方式的存储,那么存储方案如何选择?

2020-12-04 17:08:14 +08:00
 tctc4869

假设有生产者对象,

该生产者对象有一个布尔属性 A,当属性 A 设为 true,该生产者会不断生产数据,生产的数据类型是字符串或 byte 数组。

当设置属性 A 为 false,会停止生产操作。并会发出一个通知事件

生产过程中的数据要存起来,存到文件里,或者存到数据库里,但要求存的方式是持续追加的存储。有点就像 StringBuffer 的追加一样。

假设有 2 个生产者对象实例,2 个生产者对象,都开启生产模式,不断生产数据,直到最终关闭生产模式。 如果是存到文件里,那么最终保存的是两个文件,以生产者对象的 id 和日期作为文件名,

但如果是存到数据库里,比如 sql 数据库一个表里,每次生产数据,最终保存的不会是每一个生产的数据都对应一行,而是两行记录,和两个文件一样。不过 sql 数据库,有哪个数据类型或 jdbc 操作适合持续追加的存储么?

堆积追加式的存储,其他类型的数据库,有哪些合适么?

1400 次点击
所在节点    程序员
13 条回复
faceair
2020-12-04 17:14:40 +08:00
列式存储,clickhouse 之类的
teek
2020-12-04 17:16:39 +08:00
追加的话,log 也是追加,所以 kafka ?
tctc4869
2020-12-04 17:40:24 +08:00
@faceair 列式存储适合追加存储?
qiayue
2020-12-04 17:41:27 +08:00
时序数据库
tctc4869
2020-12-04 17:41:42 +08:00
kafka 适合 byte 数组追加么?
faceair
2020-12-04 17:47:09 +08:00
@tctc4869 存到同一列,用的时候单列数据全取出来自己顺序合并就好。
tctc4869
2020-12-04 19:32:38 +08:00
@qiayue 时序数据库种的“时序”一词的代指,用来根据时间标签为中心来优化的吧
JmmBite
2020-12-04 19:57:49 +08:00
没提查询要求,就纯文本追加。
GrayXu
2020-12-04 20:07:25 +08:00
@JmmBite +1,直接 append 不最快…
tabris17
2020-12-04 20:32:16 +08:00
@JmmBite 这个防不住掉数据呀
37Y37
2020-12-05 07:01:04 +08:00
这个跟监控数据一致,可以考虑下时序数据库或者环形数据库呀
tctc4869
2020-12-05 08:42:58 +08:00
@JmmBite ,要说查询要求,其实就跟读取一个文件内容差不多的,但是如果不用文件存,而是数据库存的话,不知道选什么类型的数据库比较合适
tctc4869
2020-12-05 08:44:35 +08:00
@37Y37 时序数据库的本质不是基于“时间”标签来优化数据存储效率的么?也能支持持续追加存储?就像打开一个文件写入流,往文件里持续追加数据,直到最终文件流关闭那样?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/732191

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX