上亿数据增删改查,用什么数据库合适? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
xingwing
V2EX    程序员

上亿数据增删改查,用什么数据库合适?

  •  
  •   xingwing 2016-07-08 08:56:18 +08:00 13449 次点击
    这是一个创建于 3384 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求是这样的,数据库里存的都是 kv 数据, k 是 ID , v 是多个值, k 的数量巨大,亿级或十亿级(比如中国人口数),如何能够快速(毫秒级)增删改查数据库的数据? cassandra 集群可以吗?

    43 条回复    2016-07-10 09:01:51 +08:00
    owt5008137
        1
    owt5008137  
       2016-07-08 09:10:38 +08:00 via Android
    具体还是要看应用吧,要速度快的话 redis cluster 呗
    wujunze
        2
    wujunze  
       2016-07-08 09:16:24 +08:00
    oracel
    ytmsdy
        3
    ytmsdy  
       2016-07-08 09:20:28 +08:00
    是否涉及到数据之间的逻辑运算?如果设计逻辑运算,建议使用 oracle , mysql 这一类传统数据库,如果不涉及,仅仅是增删改查,那就用 no-sql 这一类数据库吧
    xingwing
        4
    xingwing  
    OP
       2016-07-08 09:21:53 +08:00
    @ytmsdy 不涉及,能推荐一款 nosql 吗, cassandra 行吗?我看 360 在用
    elgoog1970
        5
    elgoog1970  
       2016-07-08 09:22:03 +08:00
    m
    xi4oh4o
        6
    xi4oh4o  
       2016-07-08 09:31:03 +08:00
    leveldb
    rubyvector
        7
    rubyvector  
       2016-07-08 09:34:36 +08:00
    传统数据库必须加缓存,或者直接上 NOSQL
    yannxia
        8
    yannxia  
       2016-07-08 09:36:43 +08:00
    分个库不就好了把上亿的数据放在一起都是不和谐的
    hiro0729
        9
    hiro0729  
       2016-07-08 09:39:59 +08:00
    用 HBase 呀,它最适合这种结构不复杂的数据了,但是对 key 的设计有一定要求
    tjxjj
        10
    tjxjj  
       2016-07-08 09:40:41 +08:00
    oracle ,分个区就行了,轻松搞定, 10 多个 y 不是个事儿
    owt5008137
        11
    owt5008137  
       2016-07-08 09:46:38 +08:00 via Android
    @hiro0729 hbase 延迟很高吧,毫秒级似乎比较困难
    justfly
        12
    justfly  
       2016-07-08 09:50:00 +08:00
    写不大的话 分表就好 256 表 按 key 哈希 每表 500W ,上面加个 LRU 的 memcache 就好
    xingwing
        13
    xingwing  
    OP
       2016-07-08 09:54:17 +08:00
    @justfly 单点问题咋解决?
    raptor
        14
    raptor  
       2016-07-08 09:56:07 +08:00
    看有多少钱了,有钱堆硬件的话,全部内存查询就 OK 啦。
    nine
        15
    nine  
       2016-07-08 10:04:12 +08:00   1
    6 亿数据表示用 PostgreSQL 很轻松啊。
    fin
        16
    fin  
       2016-07-08 10:05:28 +08:00
    v 是什么样的值呢
    xingwing
        17
    xingwing  
    OP
       2016-07-08 10:17:10 +08:00
    @fin 用户的一些路由信息,比如:用户长连接的服务器地址等
    justfly
        18
    justfly  
       2016-07-08 10:17:36 +08:00
    @xingwing HA 要求高的话 加多套数据库配合 Keepalived 如果在有缓存情况下 依然需要多库负载均衡 可以多从库。

    ps: 纯内存方案,可以用 codis 集群。
    ladyv2
        19
    ladyv2  
       2016-07-08 10:21:39 +08:00
    用 memsql?
    loading
        20
    loading  
       2016-07-08 10:29:21 +08:00 via Android
    分库集群,哪个数据库都行。
    如果一台机器…就不是技术的问题了,是这个方案身有问题!
    zhicheng
        21
    zhicheng  
       2016-07-08 11:12:11 +08:00 via Android
    你这个数据的量级不关键,关键的是你有多少增删改查。。。
    realpg
        22
    realpg  
    PRO
       2016-07-08 11:22:46 +08:00
    原始数据都是 kv 数据的 任何一个 nosql 轻松搞定,搞不懂你们这种环境还让人上 RDS 的想什么……
    甚至不需要负载用的统一逻辑集群(当然保证可用性的为目的的必不可少),前置一个 hash 进行分库就好了,在逻辑层进行一个基本的 hash 操作 确认该 key 的存储节点就完事
    fin
        23
    fin  
       2016-07-08 12:48:46 +08:00
    @xingwing 那一条记录占空间不大啊, 10 多亿数据 100G 内存应该够了吧
    fin
        24
    fin  
       2016-07-08 12:50:02 +08:00
    @fin 如果 value 字符的取值范围有限的话,还能存得更紧凑呢。
    hst001
        25
    hst001  
       2016-07-08 13:00:39 +08:00
    对于这种简单的 KV 存储很多 NOSQL 都没什么问题,在这里问还不如直接上机器测试。。
    RisingV
        26
    RisingV  
       2016-07-08 13:51:04 +08:00
    1.可以考虑下 aws 的 DynamoDB , amazon 主站背后也是这个。根据吞吐量收费, qps 高价格比较贵。
    2.另外推荐 aerospike ,基于 SSD 和 RAM 的混合存储,可以投入比 redis 更少的节点,支持表结构的数据。做程序化广告交易的时候用过,非常 impressive 。
    moult
        27
    moult  
       2016-07-08 13:55:08 +08:00
    说实在的,我们 Session 就是用 MySQL 存储的。一亿左右数据行,读写挺频繁的,效率也不低啊。目前就硬盘出现瓶颈影响查询效率。
    crazykuma
        28
    crazykuma  
       2016-07-08 13:56:19 +08:00
    mysql
    CrowQu
        29
    CrowQu  
       2016-07-08 14:02:40 +08:00
    就用 MySQL 就可以啊,散列成 100 张表,一个简单的 Hash 算法就可以,又不做统计计算只是直接命中指定 K 值然后做相应操作,顶多如果并发过高前置个缓存服务器缓冲一下就可以……
    iyaozhen
        30
    iyaozhen  
       2016-07-08 14:08:07 +08:00 via Android
    redis 集群呀, hashmap 数据结构,刚好契合你的需求,然后按照 key 分库。
    strwei
        31
    strwei  
       2016-07-08 15:29:43 +08:00   1
    我的 40G 的磁力链 mysql+sphinx 2 分钟索引完,应该有上亿数据了吧
    newghost
        32
    newghost  
       2016-07-08 15:57:06 +08:00
    redis
    ytmsdy
        33
    ytmsdy  
       2016-07-08 16:04:19 +08:00   1
    @xingwing 要看你自己熟悉那个,目前的流行的 nosql ,你这个数据量跑起来一般上来说都不会有太大的瓶颈的。最大的问题是你后期的开发,维护,调优。选一个自己最顺手的吧。
    fivesmallq
        34
    fivesmallq  
       2016-07-08 16:22:30 +08:00
    可以试试 mongodb ,有集群。
    deangl
        35
    deangl  
       2016-07-08 17:06:50 +08:00
    查是只查 key 还是也要查 v? 查 v 的话有没有总变化的复杂逻辑?

    如果只是查 key 的话,任何一个数据库都没有问题吧。如果是查 v ,还有变动的复杂逻辑,基本上没戏。
    wweir
        36
    wweir  
       2016-07-08 19:58:49 +08:00 via Android
    doukudb 不错,不过场景不对
    Mirana
        37
    Mirana  
       2016-07-08 20:03:47 +08:00
    mysql 分表足够了
    jason19659
        38
    jason19659  
       2016-07-08 21:39:12 +08:00
    学习。。。有没有相关的文章神马的
    heraldboy
        39
    heraldboy  
       2016-07-08 23:02:27 +08:00
    场景不清晰,如果没什么逻辑关系,数据量再大也是堆硬盘,不查询增删改采用分库分区等都可以秒杀。
    strahe
        40
    strahe  
       2016-07-09 00:08:38 +08:00
    试试 mongodb 吧
    pathbox
        41
    pathbox  
       2016-07-09 00:45:15 +08:00
    mysql 分个表 没啥压力。除非你一天就上亿数据咯。就用 mongo , cassandra ,一类的集群存了。也是要合理分区之类的
    jeffw
        42
    jeffw  
       2016-07-10 07:33:07 +08:00 via iPhone
    20 亿 sql server 轻松秒查无压力
    caomaocao
        43
    caomaocao  
       2016-07-10 09:01:51 +08:00
    nosql 分片, key hash 到片里呗。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5914 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 01:55 PVG 09:55 LAX 18:55 JFK 21:55
    Do have faith in what you're doing.
    ubao 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