要接收多个 tcp 长连接不断发送的数据并存储,哪些数据库或数据存储方案比较合适? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
tctc4869
V2EX    Java

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

  •  
  •   tctc4869 Nov 23, 2020 3170 views
    This topic created in 1988 days ago, the information mentioned may be changed or developed.

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

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

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

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

    14 replies    2020-11-23 14:12:54 +08:00
    beginor
        1
    beginor  
       Nov 23, 2020 via Android
    建议考虑时序数据库,如果是 pg 的话, 可以用 timescaledb 插件
    crclz
        2
    crclz  
       Nov 23, 2020
    建议分块来存,这样就有思路了吧?例如,TCP 源源不断地发送数据过来,然后你这边每接收 1M 数据,就往数据库插入( token: string, chunkId: int, data: byte[]),其中 chunkId 代表块的序号
    tctc4869
        3
    tctc4869  
    OP
       Nov 23, 2020
    @beginor 我去网站看了一下,有个“免费试用”按钮?收费的?
    caotian
        4
    caotian  
       Nov 23, 2020
    国产开源的 tdengine 试试
    dzdh
        5
    dzdh  
       Nov 23, 2020
    @tctc4869 有收费服务 不使用 cluster 的话,使用开源版本即可。有企业版。
    ClarkAbe
        6
    ClarkAbe  
       Nov 23, 2020 via iPhone
    [bbolt] (没有手抖就是两个 b,一个 b 的已经归档了)kv 数据库,支持时序,直接怼进去就行了,支持树状结构....可以用日期做桶名
    opengps
        7
    opengps  
       Nov 23, 2020 via Android
    其实可以说任何数据库都可以用,我经历过 sqlserver 下的 20 万 tcp 链接,单链接 10 秒间隔直接入库。
    以前那时候还没有各种中间件的概念,用的特别简单的做法线上实践过
    tctc4869
        8
    tctc4869  
    OP
       Nov 23, 2020
    @opengps 是吗,每个 tcp 发送的数据,直接一个 insert 进去?
    opengps
        9
    opengps  
       Nov 23, 2020 via Android
    @tctc4869 数据库有自己的连接池,并不是应用层的一个 tcp 占用一个数据库链接的
    buf1024
        10
    buf1024  
       Nov 23, 2020
    数据库没有你想象中那么弱,任意一个主流数据库都能满足你的需求。
    Macv1994
        11
    Macv1994  
       Nov 23, 2020
    时序数据库吧 我记得好像有个国产开源的 不记得叫啥了
    xylophone21
        12
    xylophone21  
       Nov 23, 2020
    这不是典型的流式计算的前一半吗?(不确定后一半是不是你没说)可以看看 Apache Flink 等是怎么玩的
    1. 数据不大怎么搞都没事,数据大一般是用一个消息队列异步处理
    2. 并不一定要把原始数据入库,存 S3,HDFS 等都可以
    3. 不一定需要专门的 TCP 长连接(当然可能你之前就是这样),HTTP 也是 keep-alive 的,还方便
    misaka19000
        13
    misaka19000  
       Nov 23, 2020
    看起来是和时序
    CodeCore
        14
    CodeCore  
       Nov 23, 2020
    需要计算数据量和数据发送频率。
    我们也是 TCP 发送数据,我就是 PG 存储的。
    每个长链接,每隔 10s 一次数据。数据量不大 5 KB 以内。
    About     Help     Advertise     Blog     API     FAQ     Solana     2606 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 51ms UTC 14:49 PVG 22:49 LAX 07:49 JFK 10:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86