V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  Java

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

  •  
  •   tctc4869 · 2020-11-23 08:50:14 +08:00 · 2742 次点击
    这是一个创建于 1496 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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