`
liuxinglanyue
  • 浏览: 562504 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

又一个key/value数据库 Memlink

阅读更多

为什么会有Memlink?

对于大型论坛服务,比如百度贴吧、天涯论坛,日均发帖量过百万,日均PV过亿,日积月累下来的帖子数量可能几十亿。这么大的一个论坛服务,海量数据的存储、访问是一个非常有挑战性的技术难题。

中小规模的论坛通常使用mysql/sql server作为后端存储,当数据量膨胀时,比如一个版面有百万、千万级别主贴,一个主贴下有数百万回复,此时使用SQL语句select … order by … limit … ,性能可想而知。

大型论坛中的数据可以抽象为如下几类数据结构:

  1. 版面信息、主帖信息、回帖信息等。这是Key-Value结构的数据类型,比如主贴id对应主贴的信息(标题、发帖时间、作者等等),回帖id对应回贴的信息(回复内容、回复时间、回复者等等)。
  2. 版面的主贴列表,主贴列表可按发表时间或者回复时间排序;主贴下的回复列表,等等。这种数据类型是key-list数据类型,而且list是可排序的。
  3. 其他周边数据。比如斑竹、会员等,由于数据量较小、逻辑关系较复杂,可以使用sql系统存储。比如检索数据,由检索系统承担。等等。

 

对于Key-Value系统,市面上有较多选择,它们的数据容量大小从数百万到上百亿不等,性能、功能也各有差异,由于讨论KV系统的文章很多,再次不赘述。

对于Key-list系统,市面上可选择的余地就非常小,加之线上工业级别的要求,因而就诞生出了memlink系统。

Memlink简介

Memlink是一个高性能、持久化、分布式的Key-list/queue数据引擎。正如名称中的memlink所示,所有数据都建构在内存中,保证了系统的高性能(大约是redis几倍),同时使用了redo-log技术保证数据的持久化。Memlink还支持主从复制、读写分离、List过滤操作等功能。

特点:

  • 内存数据引擎,性能极为高效
  • List块链结构,精简内存,优化查找效率
  • Node数据项可定义,支持多种过滤操作
  • 支持redo-log,数据持久化,非Cache模式
  • 分布式,主从同步

 

与Redis区别

redis同样也提供key-list 存储功能,memlink与redis区别有:

  • redis比较消耗内存。每个存储节点,在不支持vm的情况下要额外消耗12字节内存,在支持vm的情况下,每个节点额外消耗24字节内存。对于存储上亿条数据来说,额外消耗的内存太大。
  • redis redo-log不够完善。redis redo-log机制:每隔一段时间同步磁盘(此期间重启就好丢失数据);追加log方式,会使log文件越来越大,而且性能不够优化。
  • 主从同步不完善。如果从节点因为网络原因丢失了部分同步数据,需要重新完全获取一份主节点的所有数据。在大数据量的情况下,不太合适。
  • 网络处理主事件循环只有一个线程,不能很好的利用多核;同时读写没有分离,没有进行写优先处理。
  • list节点没有mask表,不能进行一些属性过滤。

 

memlink主要对上述特点进行了改进。

性能

Benchmark

Client API

ClientAPI

谁在使用?

目前Memlink应用于天涯来吧、天涯论坛系统。

未来

Memlink是专注于key => list\Queue对象的存储系统,所以它内存使用更精简、性能更高效。Key => list\Queue系统作为Key => value另一种形式补充,为高性能海量数据的Web应用提供了新的选择。


分享到:
评论

相关推荐

    什么叫key-value数据库

    想要明白什么是key/value数据库,就必须了解哈希表(Hash Table)这种数据结构。 比如,Berkley DB就是典型的key/value数据库。

    论文研究-一种基于key-value数据库的快速地名地址输入提示方法.pdf

    针对以上问题,提出一种基于key-value数据库的快速地名地址输入提示方法。该方法基于Trie树结构进行改进,降低了地址索引的复杂度;基于key-value数据库构建Trie树,避免了内存消耗巨大的问题。实验结果表明,基于...

    redis是一个高性能的key-value数据库

    Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object...

    关于使用key/value数据库redis和TTSERVER的心得体会

    Redis是一个高性能的key/value存储系统,它和memcached类似,但Redis支持的value类型更多,包括string、list、set和zset等,这使得它比memcached功能更为丰富。Redis将数据存储在内存中,以此来保证快速的存取性能,...

    基于操作历史图的分布式Key-Value数据库一致性检测算法.pdf

    廖彬、张陶、李敏、于炯、国冰磊和刘炎在《基于操作历史图的分布式Key-Value数据库一致性检测算法》一文中,针对分布式Key-Value数据库一致性问题提出了一个创新的算法。该算法首先定义了读写操作记录之间的时序关系...

    Python-简单的内存KeyValue存储采用Elixir编写基于cabolshards

    标题中的“Python-简单的内存KeyValue存储采用Elixir编写基于cabolshards”表明我们要讨论的是一个使用Python语言实现的内存Key/Value存储系统,而这个系统是基于Elixir的`cabol/shards`库构建的。`cabol/shards`...

    sdb, 支持数组和json的基于字符串的简单快速 key-value 数据库.zip

    sdb, 支持数组和json的基于字符串的简单快速 key-value 数据库 ( 字符串数据库)sdb是基于djb磁盘存储库的简单字符串键/值数据库,支持JSON和数组的自省。mcsdbd是一个基于sdb的磁盘存储的memcache服务器。 它是作为...

    Redis一个高性能的key-value数据库

    Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。

    淘宝分布式 key/value 存储引擎Tair Java客户端测试程序

    具体情况这篇文章的描述:淘宝分布式 key/value 存储引擎Tair安装部署过程及Java客户端测试一例(http://blog.csdn.net/lanxuezaipiao/article/details/37599151) 测试程序运行步骤: make build make run

    Tokyo Cabinet Key:Value数据库及其扩展应用

    《Tokyo Cabinet Key-Value数据库及其扩展应用》 在应对现代Web 2.0应用程序的高并发和大数据量需求时,传统的MySQL数据库遇到了性能瓶颈。单表记录数的增长导致查询效率降低,而读写分离模式在面对大量写操作时...

    Grafana 变量 KeyValue 形式实现.md

    Grafna Dashboard 中,... 常规实现没有问题,但对于下拉列表,最终用户一般要求看到的是 text 字段不是 value 字段,查询时则必须按 value 字段 这个问题,在Grafana 中有实现但需要进行设置 本方案解决上述的问题

    天涯社区开源的NoSQL数据库 Memlink.zip

    Memlink是天涯社区开发的一个高性能、持久化、分布式的Key-list/queue数据引擎。正如名称中的memlink所示,所有数据都 建构在内存中,保证了系统的高性能 (大约是redis几倍),同时使用了redo-log技术保证数据的持久...

    分布式key-value键值数据库与关系数据库-NoSql收集.pdf

    分布式Key-Value键值数据库与关系数据库NoSQL的对比及发展趋势 随着云计算和大数据时代的到来,传统的关系数据库(RDBMS)受到了来自非关系型数据库(NoSQL)的挑战,尤其是分布式Key-Value键值数据库。NoSQL的兴起...

    redis 可持久化 Key-Value数据库

    RDB是在特定时间点对数据库进行快照保存,生成一个纯二进制文件,这种方式持久化效率高,恢复速度快,但可能会丢失最近的一小部分数据。AOF则是记录所有写操作的日志,每次操作都追加到文件末尾,确保了数据的完整性...

    分布式key/value存储系统Tair

    Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存储对应。Tair除了普通Key/Value系统提供的功能,比如get、put、delete以及批量接口外,还有...

Global site tag (gtag.js) - Google Analytics