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

数亿条key-value对,每个value大概是20k~50k的json字符串,求分布式存储方案!

  •  
  •   webflier · 2013-05-22 22:08:02 +08:00 · 2157 次点击
    这是一个创建于 4238 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不考虑mongodb,mongodb的disk footprint太大,太占硬盘空间。
    hbase是不是一个好方案?没用过,稍微浏览了下文档,感觉配置起来有点复杂。
    redis做集群,合适吗?
    或者整一个分布式文件系统,直接存成文件?
    大神们,求破!
    22 条回复    2014-06-06 10:42:23 +08:00
    Livid
        1
    Livid  
    MOD
       2013-05-22 22:12:11 +08:00
    Riak
    Cadina
        2
    Cadina  
       2013-05-22 22:12:46 +08:00
    这要看你查询的需求了啊
    Livid
        3
    Livid  
    MOD
       2013-05-22 22:13:12 +08:00   ❤️ 1
    HBase 的问题是,这些数据你打算用什么编程语言来存取?

    HBase 的 first-class 编程语言是 Java。
    plprapper
        4
    plprapper  
       2013-05-22 22:14:40 +08:00
    把value做序列化处理 然后再看看大小呢?
    webflier
        5
    webflier  
    OP
       2013-05-22 22:22:30 +08:00
    @Livid 工作语言c#, mono平台,Riak感觉水很深啊,刚出来的东西,你对Riak有很好的体验不?

    @Cadina 查询的话,基本就是根据key值random access
    Livid
        6
    Livid  
    MOD
       2013-05-22 22:23:45 +08:00   ❤️ 1
    @webflier Riak 出来的时间不短了,是一个靠谱的分布式 KV 数据库。你可能需要花一些时间研究它的部署,但是一旦熟悉了,这个东西还是很可靠的。
    webflier
        7
    webflier  
    OP
       2013-05-22 22:24:43 +08:00
    @plprapper 如果size变小的话,5~10k,有什么好建议?
    swulling
        8
    swulling  
       2013-05-22 22:27:58 +08:00
    你这个才T级别的数据,不必太在乎硬盘空间吧。
    austin
        9
    austin  
       2013-05-22 22:55:52 +08:00   ❤️ 1
    应该视你数据的读取频率、改写频率、数据一致性要等需求不同,而最终方案不同。
    如果读取频率很小,自己搞一个hash算法,存文件或直接存mysql都可以。
    如果读取的很频繁,而且是乱序的,放redis里面是一个好方案。也是自己hash分到多个redis实例即可。
    davepkxxx
        10
    davepkxxx  
       2013-05-22 22:58:01 +08:00
    memcache或着membase
    llbgurs
        11
    llbgurs  
       2013-05-22 23:03:44 +08:00
    couchbase
    oldgun
        12
    oldgun  
       2013-05-22 23:11:11 +08:00
    你这个其实Berkeley DB就可了,可能插入性能需要看看。
    Los
        13
    Los  
       2013-05-23 00:37:51 +08:00   ❤️ 1
    插个内容,Hbase 支持 REST 方式进行操作
    http://wiki.apache.org/hadoop/Hbase/Stargate
    当然,有更好的另一种操作方式是通过 Thrift 连接 Hbase,能够支持常见的开发语言,包括c#,java,python,php,ruby 等等
    http://wiki.apache.org/hadoop/Hbase/ThriftApi
    Frannk
        14
    Frannk  
       2013-05-23 00:56:43 +08:00   ❤️ 1
    Mysql 分库分表 存blob
    Ricepig
        15
    Ricepig  
       2013-05-23 01:28:24 +08:00   ❤️ 1
    column based database就好了,列数据压缩,效率比较高
    aisk
        16
    aisk  
       2013-05-23 01:34:35 +08:00   ❤️ 1
    LevelDB也可以。或者楼主可以按文件名做hash到不同机器,然后机器里再按hash分布到多层的目录里。
    webflier
        17
    webflier  
    OP
       2013-05-23 09:51:39 +08:00
    @aisk
    @Ricepig
    @Frannk
    @Los
    @oldgun
    @llbgurs
    @davepkxxx
    @austin
    @swulling
    @Livid
    @plprapper
    @Cadina
    谢谢大家,打算用Riak + leveldb backend试试!
    wuxqing
        18
    wuxqing  
       2013-05-23 14:51:27 +08:00
    Twemproxy + redis 应该也可以的
    Twemproxy:https://github.com/twitter/twemproxy
    clowwindy
        19
    clowwindy  
       2013-05-23 14:56:04 +08:00
    @Livid HBase 有 HTTP 和 thrift 接口,我们之前用过 tornado + REST HBase
    不过 HBase 的运维成本非常高。
    Frannk
        20
    Frannk  
       2013-05-23 15:27:35 +08:00
    @webflier 记得回来谈谈效果。
    oldcai
        21
    oldcai  
       2013-05-23 15:32:06 +08:00
    @Livid riak的文档的英文好像有些错误,大概不是英语母语的人写的?
    pyKun
        22
    pyKun  
       2014-06-06 10:42:23 +08:00
    关注下riak
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1024 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 19:35 · PVG 03:35 · LAX 11:35 · JFK 14:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.