
在服务器建立服务端,与多个 tcp 连接保持长连接,服务端会根据客户端发送的 token 验证确定是否保持长连接建立“session”缓存,
在某个状态开启时(我称为存储状态),要把接收多个不确定数量的 tcp 客户端(不是 http,也不是 mqtt,就是纯 tcp 连接)的数据存储到服务端里,如果可以的话,一定要根据客户端的 token+日期 分别进行保存。
那么比较合适的存储方案或数据库是什么?我想到的是为每个长连接,在存储状态开启时,根据 token 与存储状态开启时间作为文件名生成文本文件,建立文件写入流,每次接收 tcp 数据都写入文件,当 tcp 连接关闭时,就关闭文件写入流。
不过除了这种方案,还有其他合适的吗?比如数据库?如果 sql 数据库的话,它适合这种“在长连接环境下,不断接收长连接发送的数据并保存“的环境么?如果可以的话,java 的 pgsql 方案一般是怎么弄的?
1 beginor Nov 23, 2020 via Android 建议考虑时序数据库,如果是 pg 的话, 可以用 timescaledb 插件 |
2 crclz Nov 23, 2020 建议分块来存,这样就有思路了吧?例如,TCP 源源不断地发送数据过来,然后你这边每接收 1M 数据,就往数据库插入( token: string, chunkId: int, data: byte[]),其中 chunkId 代表块的序号 |
4 caotian Nov 23, 2020 国产开源的 tdengine 试试 |
6 ClarkAbe Nov 23, 2020 via iPhone [bbolt] (没有手抖就是两个 b,一个 b 的已经归档了)kv 数据库,支持时序,直接怼进去就行了,支持树状结构....可以用日期做桶名 |
7 opengps Nov 23, 2020 via Android 其实可以说任何数据库都可以用,我经历过 sqlserver 下的 20 万 tcp 链接,单链接 10 秒间隔直接入库。 以前那时候还没有各种中间件的概念,用的特别简单的做法线上实践过 |
10 buf1024 Nov 23, 2020 数据库没有你想象中那么弱,任意一个主流数据库都能满足你的需求。 |
11 Macv1994 Nov 23, 2020 时序数据库吧 我记得好像有个国产开源的 不记得叫啥了 |
12 xylophone21 Nov 23, 2020 这不是典型的流式计算的前一半吗?(不确定后一半是不是你没说)可以看看 Apache Flink 等是怎么玩的 1. 数据不大怎么搞都没事,数据大一般是用一个消息队列异步处理 2. 并不一定要把原始数据入库,存 S3,HDFS 等都可以 3. 不一定需要专门的 TCP 长连接(当然可能你之前就是这样),HTTP 也是 keep-alive 的,还方便 |
13 misaka19000 Nov 23, 2020 看起来是和时序 |
14 CodeCore Nov 23, 2020 需要计算数据量和数据发送频率。 我们也是 TCP 发送数据,我就是 PG 存储的。 每个长链接,每隔 10s 一次数据。数据量不大 5 KB 以内。 |