V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
xingwing
V2EX  ›  程序员

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

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

    需求是这样的,数据库里存的都是 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  
       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   ·   实用小工具   ·   1729 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:35 · PVG 00:35 · LAX 08:35 · JFK 11:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.