JAVAEYE、http://www.himysql.com/首发,未经原作者允许,请勿转载。
最近几个项目都用到了IP到城市转换功能。
之前,每个项目都是直接在纯真IP库里查。
可是现在数据量大了,越来越发现效率成问题了。
前一阵子看到豆瓣的开源项目BeansDB,当时直觉就告诉我,这东西非常有用。
抽空在测试机上搭建了一下环境,测试了一小把,感觉速度提高了很多。
立马把IP转换部分代码改成里基于BeansDB的。转换之后的架构如左图。
流程如下:
以IP为Key,在BeansDB中取值。
若第一步返回不为空,直接返回取回的值,流程结束。
若第一步返回为空,则以QQWry为Key,取回QQWry.Dat文件的二进制文件
按传统方法在第三步取回的QQWry.Dat二进制文件中查找IP对应地址信息
将第四步查找到的地址信息,以IP为Key,存进BeansDB中,并返回第四步查找的地址信息。
看着挺复杂,实际的代码改动非常之小。
继承原来IP转换类
重载初始化函数,以QQWry为Key在BeanDB中取值,若返回值不为空,则self.img置为返回值;若为空,将QQWry.Dat读到内存,以QQWry为Key,QQWry.Dat的二进制镜像为Value存到BeansDB中。
重载IP查找函数,按上面的逻辑处理IP查询。
从一个应用中依次取十万条记录,取五次,IP转换的耗时(不包括数据操作的时间)如下:
0:00:09.034996
0:00:07.834779
0:00:07.965700
0:00:08.016297
0:00:07.976602
另:写文章的同时,又做了一个100W条数据的转换测试,结果:0:01:45.109918
BeansDB只有一台机器提供服务,跟应用跑在同一台机器上。
这个结果目前来说还是比较满意的,应该还有继续优化的空间
但这已证明了BeansDB性能还是非常可观的。
分享到:
相关推荐
通过以上对BeansDB的设计与实现的详细介绍,我们可以看出BeansDB是一款设计精良、功能强大的分布式存储系统,它不仅能够满足大规模数据存储的需求,同时也具备高可用性和可扩展性等特点,非常适合用于处理大数据量的...
BeansDB是豆瓣于2009年开发的一款开源数据库存储系统,它主要被设计为一种高性能、分布式、高可用的Key-Value数据库。不同于传统的事务型关系数据库或POSIX文件系统,BeansDB特别适用于处理大量小至中等大小的对象...
这是本人花了几天的时间对 目前beansdb的源代码进行的分析,其中核心部分每一行都有详细注释。详细注释的文件有htree.c hstore.c bitcask.c record.c beansdb.c,其它部分注释的比较少。因为其它部分不会影响我们的...
BeansDB 是一个强大的分布式键值存储系统,设计用于处理海量数据并确保高可用性。它在大数据领域扮演着重要角色,因为它的核心特性是能够高效地存储和检索大量的键值对。这个系统的设计灵感来源于Amazon的Dynamo,但...
BeansDB 是一个分布式键值存储系统,主要用于支持大规模的数据存储和检索。在豆瓣(Douban)的业务场景中,它被用来处理大量的用户数据和元数据。Beanseye 是针对 BeansDB 的一个重要补充,它是一个由 Go 语言编写的...
BeansDB 是一个主要针对大数据量、高可用性的分布式KeyValue存储系统,采用HashTree和简化的版本号来快速同步保证最终一致性(弱),一个简化版的 Dynamo。 它采用类似memcached的去中心化结构,在客户端实现数据...
对于高性能系统的设计,应当尽可能减少对磁盘的访问次数。 **2. 不要删除数据** - NoSQL数据库设计时推荐采用“覆盖”而非“删除”的策略来处理数据,这有助于保持数据的一致性和避免复杂的事务处理。 **3. RAM是...
beansdb -p 7901 -d -P/tmp/beansdb1.pid -L/tmp/beansdb1.log -H /home/gfreezy/beans/db/db1 -vv beansdb -p 7902 -d -P/tmp/beansdb2.pid -L/tmp/beansdb2.log -H /home/gfreezy/beans/db/db2 -vv 自定义设置。...
其中,BeansDB是一种去中心化的分布式哈希表存储系统,能够提供高可用性和易于扩展的能力。 3. **大文件**:例如日志和备份数据,这类数据通常体积较大,但数量较少。豆瓣使用了MooseFS等分布式文件系统进行存储。...
- **分布式文件系统**:为了应对图片文件剧增带来的I/O负载问题,引入了分布式文件系统(如MogileFS/FastDFS/BeansDB/TaobaoTFS)。这些系统可以提供更好的可扩展性和容错能力。 - **缓存策略改进**:传统的缓存...
性能Nuclear是指使用Nuclear来实现分布式系统的性能优化。 两个设计上的 Tips是指分布式系统的设计上的Tips和建议。 Voldemort是指使用Voldemort来实现分布式系统的可扩展性。 Dynomite是指使用Dynomite来实现...
BeansDB的设计追求简单维护、稳定性能、易扩容、高可用性以及最终一致性。在豆瓣内部,BeansDB有两个集群,doubandb和doubanfs,分别用于存储小型数据(如文本信息)和中型数据(如图片、音频)。doubandb存储了约30...
NoSQL数据库,全称为“Not Only SQL”,是一种非关系型数据库系统,主要为解决大数据、高并发、分布式存储等场景下的问题而设计。在互联网领域,NoSQL数据库因其灵活的数据模型和优秀的可扩展性,被广泛应用。 思想...
Beansdb是为大型在线系统设计的分布式键值存储系统,旨在实现高可用性和易于管理。 它采用了Amazon Dynamo的想法,然后进行了简化以保留“什么是Beansdb”? Beansdb是为大型在线系统设计的分布式键值存储系统,旨在...
- BeansDB是中国豆瓣社区自主开发的分布式键值存储系统。 5. 数据挖掘与可视化: - 数据挖掘是从大量数据中提取有价值信息的过程,涉及数据清洗、预处理、模式识别等步骤。 - 数据源的质量、量级、噪声和相关性...
- BeansDB是由豆瓣社区开发的,NewSQL数据库如MemSQL提供高性能的事务处理,而NoSQL数据库如Bigtable和Dynamo提供了灵活的数据模型。 4. 数据挖掘与可视化: - 数据挖掘包括数据融合、分析和决策支持,但发现的...