要接收多个 tcp 长连接不断发送的数据并存储,哪些数据库或数据存储方案比较合适?

2020-11-23 08:50:14 +08:00
 tctc4869

在服务器建立服务端,与多个 tcp 连接保持长连接,服务端会根据客户端发送的 token 验证确定是否保持长连接建立“session”缓存,

在某个状态开启时(我称为存储状态),要把接收多个不确定数量的 tcp 客户端(不是 http,也不是 mqtt,就是纯 tcp 连接)的数据存储到服务端里,如果可以的话,一定要根据客户端的 token+日期 分别进行保存。

那么比较合适的存储方案或数据库是什么?我想到的是为每个长连接,在存储状态开启时,根据 token 与存储状态开启时间作为文件名生成文本文件,建立文件写入流,每次接收 tcp 数据都写入文件,当 tcp 连接关闭时,就关闭文件写入流。

不过除了这种方案,还有其他合适的吗?比如数据库?如果 sql 数据库的话,它适合这种“在长连接环境下,不断接收长连接发送的数据并保存“的环境么?如果可以的话,java 的 pgsql 方案一般是怎么弄的?

2641 次点击
所在节点    Java
14 条回复
beginor
2020-11-23 08:54:50 +08:00
建议考虑时序数据库,如果是 pg 的话, 可以用 timescaledb 插件
crclz
2020-11-23 08:57:57 +08:00
建议分块来存,这样就有思路了吧?例如,TCP 源源不断地发送数据过来,然后你这边每接收 1M 数据,就往数据库插入( token: string, chunkId: int, data: byte[]),其中 chunkId 代表块的序号
tctc4869
2020-11-23 09:01:56 +08:00
@beginor 我去网站看了一下,有个“免费试用”按钮?收费的?
caotian
2020-11-23 09:03:05 +08:00
国产开源的 tdengine 试试
dzdh
2020-11-23 09:03:08 +08:00
@tctc4869 有收费服务 不使用 cluster 的话,使用开源版本即可。有企业版。
ClarkAbe
2020-11-23 09:12:25 +08:00
[bbolt] (没有手抖就是两个 b,一个 b 的已经归档了)kv 数据库,支持时序,直接怼进去就行了,支持树状结构....可以用日期做桶名
opengps
2020-11-23 09:18:24 +08:00
其实可以说任何数据库都可以用,我经历过 sqlserver 下的 20 万 tcp 链接,单链接 10 秒间隔直接入库。
以前那时候还没有各种中间件的概念,用的特别简单的做法线上实践过
tctc4869
2020-11-23 09:21:39 +08:00
@opengps 是吗,每个 tcp 发送的数据,直接一个 insert 进去?
opengps
2020-11-23 09:23:51 +08:00
@tctc4869 数据库有自己的连接池,并不是应用层的一个 tcp 占用一个数据库链接的
buf1024
2020-11-23 09:27:20 +08:00
数据库没有你想象中那么弱,任意一个主流数据库都能满足你的需求。
Macv1994
2020-11-23 10:05:49 +08:00
时序数据库吧 我记得好像有个国产开源的 不记得叫啥了
xylophone21
2020-11-23 10:30:48 +08:00
这不是典型的流式计算的前一半吗?(不确定后一半是不是你没说)可以看看 Apache Flink 等是怎么玩的
1. 数据不大怎么搞都没事,数据大一般是用一个消息队列异步处理
2. 并不一定要把原始数据入库,存 S3,HDFS 等都可以
3. 不一定需要专门的 TCP 长连接(当然可能你之前就是这样),HTTP 也是 keep-alive 的,还方便
misaka19000
2020-11-23 10:42:01 +08:00
看起来是和时序
CodeCore
2020-11-23 14:12:54 +08:00
需要计算数据量和数据发送频率。
我们也是 TCP 发送数据,我就是 PG 存储的。
每个长链接,每隔 10s 一次数据。数据量不大 5 KB 以内。

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

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

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

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

© 2021 V2EX