为什么会有Memlink?
对于大型论坛服务,比如百度贴吧、天涯论坛,日均发帖量过百万,日均PV过亿,日积月累下来的帖子数量可能几十亿。这么大的一个论坛服务,海量数据的存储、访问是一个非常有挑战性的技术难题。
中小规模的论坛通常使用mysql/sql server作为后端存储,当数据量膨胀时,比如一个版面有百万、千万级别主贴,一个主贴下有数百万回复,此时使用SQL语句select … order by … limit … ,性能可想而知。
大型论坛中的数据可以抽象为如下几类数据结构:
- 版面信息、主帖信息、回帖信息等。这是Key-Value结构的数据类型,比如主贴id对应主贴的信息(标题、发帖时间、作者等等),回帖id对应回贴的信息(回复内容、回复时间、回复者等等)。
- 版面的主贴列表,主贴列表可按发表时间或者回复时间排序;主贴下的回复列表,等等。这种数据类型是key-list数据类型,而且list是可排序的。
- 其他周边数据。比如斑竹、会员等,由于数据量较小、逻辑关系较复杂,可以使用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数据库,就必须了解哈希表(Hash Table)这种数据结构。 比如,Berkley DB就是典型的key/value数据库。
针对以上问题,提出一种基于key-value数据库的快速地名地址输入提示方法。该方法基于Trie树结构进行改进,降低了地址索引的复杂度;基于key-value数据库构建Trie树,避免了内存消耗巨大的问题。实验结果表明,基于...
本篇文章是对使用key/value数据库redis和TTSERVER的心得体会进行了详细的分析介绍,需要的朋友参考下
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类key/value存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object...
Key-value存储简介
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API
基于关系型与Key-Value型数据库混合存储的多租户数据存储架构,蔺皓,王柏,针对SaaS多租户、可配置、易扩展的特点,在设计其数据存储架构时存在三种主流方案:数据库分离法、表空间分离法以及共享表空间法��
sdb, 支持数组和json的基于字符串的简单快速 key-value 数据库 ( 字符串数据库)sdb是基于djb磁盘存储库的简单字符串键/值数据库,支持JSON和数组的自省。mcsdbd是一个基于sdb的磁盘存储的memcache服务器。 它是作为...
Redis是一个高性能的key-value数据库。redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用。它提供了Python,Ruby,Erlang,PHP客户端,使用很方便。
针对不同的场景,我们应该选不同的Key-Value数据库,没有一个Key-Value数据库适用于所有解决方案,但是如果你仅仅想要一个简单、易于使用、快速、支持多种强大数据结构的Key-Value数据库,Redis可能是你作为开始的一...
具体情况这篇文章的描述:淘宝分布式 key/value 存储引擎Tair安装部署过程及Java客户端测试一例(http://blog.csdn.net/lanxuezaipiao/article/details/37599151) 测试程序运行步骤: make build make run
QuineDB是一个key-value存储数据库
Tokyo Cabinet Key-Value数据库及其扩展应用
Redis 是一个高性能的key-value数据库。 redis的出现,很大程度补偿了memcached这类keyvalue存储的不足,在部 分场合可以对关系数据库起到很好的补充作用。
Memlink是天涯社区开发的一个高性能、持久化、分布式的Key-list/queue数据引擎。正如名称中的memlink所示,所有数据都 建构在内存中,保证了系统的高性能 (大约是redis几倍),同时使用了redo-log技术保证数据的持久...
Tair是一个Key/Value结构数据的解决方案,它默认支持基于内存和文件的两种存储方式,分别和我们通常所说的缓存和持久化存储对应。Tair除了普通Key/Value系统提供的功能,比如get、put、delete以及批量接口外,还有...
#资源达人分享计划#
Grafna Dashboard 中,... 常规实现没有问题,但对于下拉列表,最终用户一般要求看到的是 text 字段不是 value 字段,查询时则必须按 value 字段 这个问题,在Grafana 中有实现但需要进行设置 本方案解决上述的问题