`
AvinDev
  • 浏览: 112394 次
社区版块
存档分类
最新评论

[笔记]用ets实现了把一致性哈希中的最接近项查找

阅读更多
最近有些空,继续捣鼓consisten hash的简单实现。先前修改gb_trees,加入了lookup_nearest(Key, Tree) 函数,通过二叉查找和回朔,来查找最接近Key的项。昨天看了下xbaytable的DHT实现,发觉其实用ets会更快捷:

ets:prev(Table, Key) 和 ets:next(Table, Key) 函数,可以返回Table中Key的上一个或下一个存在的键,无论这个Key是否存在于Table中。再加上 ets:first/1、ets:last/1、ets:lookup/2,就可以实现了。

实践过程中发现了个问题,需要定义这个哈希范围的最大值,比如 0xFFFFFFFF (4294967295),才能正确比较环中最接近的一个点,比如环里面有两个Key:{4294960010,10},对于 4294963657,最接近的是 4294960010,而对于4294963658,最接近的是10。原先使用二叉查找的实现忽略了这个问题,会导致查找4294960011会返回10。

ets是使用c代码实现,性能和内存占用比gb_trees好很多,构造429497个元素的ets,操作在几秒内完成,而gb_trees起码要几十秒,完全不在一个量级。不过查找最接近的值耗时就很接近,查找4294968次,gb_trees实现花了61875ms,ets实现花了65031ms,结果很接近。

此外还有一个问题,就是在使用next,prev过程中碰到了‘锁’的问题,毕竟ets是一种共享的存储结构。文档说明:
引用
Unless a table of type set, bag or duplicate_bag is protected using safe_fixtable/2, see below, a traversal may fail if concurrent updates are made to the table. If the table is of type ordered_set, the function returns the next key in order, even if the object does no longer exist.


对ets和dets的使用还是太少了,抽空再写写代码加深认识

===================
4.2修改:搞错单位了,应该是1ms内可以调用50多次。。。
分享到:
评论
1 楼 mryufeng 2008-04-02  
ets肯定会比gb_tree快 毕竟是c实现的 推荐大量使。事实上erlang的标准库也是大量在用它。

相关推荐

    ETS5 中文免费 试用

    总之,ETS5中文免费试用版为KNX系统的设计和调试提供了强大的工具,尤其是对于那些需要处理多个项目或者设备数量较多的用户,它提供了极大的便利性和成本效益。同时,中文界面使得国内用户能更轻松地掌握这款专业...

    ETS5 版本ETS5.7.5(官网下载)

    6. **兼容性**:ETS5支持多种操作系统,如Windows 7及更高版本,满足不同用户的使用需求。 7. **培训与支持**:ETS5界面友好,适合初学者和专家使用。同时,KNX协会提供了丰富的在线资源和教程,帮助用户掌握软件的...

    ETS v5.7.2 中文演示版(支持5个项目的设备)

    ETS,全称是Engineering ToolSoftware,是由KNX协会开发的一款专业工具,用于设计、配置以及调试基于KNX技术...通过深入理解和熟练使用ETS,用户可以充分发挥KNX技术的优势,打造更加智能化、节能化的居住和工作环境。

    ETS最新版软件仿真软件

    总的来说,ETS最新版软件仿真软件是KNX系统开发、调试和维护过程中不可或缺的工具,它的最新版本通常会引入更多改进和新特性,提高工作效率和系统的可靠性。无论是专业工程师还是初学者,掌握ETS的使用都将对KNX项目...

    ETS5 最新调试教程视频

    7. **故障排查**:教授如何利用ETS5的诊断功能,查找并解决系统中的故障,如设备离线、通信错误等常见问题。 8. **项目备份与更新**:讲解如何备份已完成的项目,以及在设备或系统改动后如何更新项目。 9. **实际...

    ETS300_364手册

    ETS300_364手册是一份详尽的文档集合,主要针对ETS300与ETS364测试机的使用和维护。这个压缩包包含26个PDF文件,涵盖了从硬件配置到软件系统,再到测试程序开发的全方位内容。下面我们将深入探讨这些关键知识点。 1...

    ETS 5.6.6 和谐版

    这个版本主要是为教育和学习目的而设计的,提醒用户在商业环境中应使用官方正版软件,以确保合法性和获得全面的技术支持。 KNX(欧洲安装技术)是一种国际标准(ISO/IEC 14543-3),广泛应用于建筑自动化,包括智能...

    ets和Dets

    在Erlang编程环境中,ETS(Erlang Term Storage)和Dets(Disk-based ETS)是两种重要的数据存储机制,它们提供了高效的数据管理和访问功能。这篇文章将深入探讨这两个概念,以及它们在实际开发中的应用。 ETS是...

    Ets5 v5.5.2.rar

    ETS5(KNX Engineering Tool Software)是KNX协会推出的一款专业的智能家居控制系统编程软件,主要用于设计、配置、调试和诊断基于KNX技术的智能建筑系统。KNX是一种国际标准(ISO/IEC 14543-3),广泛应用于楼宇...

    KNX调试软件ETS3附使用说明书.zip

    4. **诊断与测试**:在调试过程中,ETS3可以帮助检测网络中的错误,如通信故障、设备状态异常等。它还提供了模拟工具,可以在实际安装前验证程序的正确性。 5. **文档生成**:ETS3可以自动生成项目报告和用户手册,...

    ETS 操作手册

    ETS,全称可能是“Enterprise Textile System”或特定领域的...综上所述,ETS操作手册是制衣行业从业人员的得力助手,通过深入理解和熟练运用手册中的知识,可以提升工作效率,优化生产流程,实现更有效的业务管理。

    前端开源库-ets

    在实际开发中,ets库通常与其他前端构建工具(如Webpack或Gulp)结合使用,通过配置脚本自动执行上述步骤。这样,开发者可以在开发阶段就进行翻译工作,而不是等到项目接近完成时才匆忙处理。 标签“前端开源”表明...

    ETS 5.6.5安装文件包

    5. **自动化脚本**:ETS支持GVL(Group Value Link)脚本,允许用户编写自定义逻辑,实现自动化控制,提高系统的灵活性和效率。 6. **兼容性**:ETS 5.6.5兼容多种操作系统,如Windows 7、8和10,确保在不同工作...

    openharmony简易播放器ets版本

    然而,在这个场景下,“ETS版本”可能指的是使用Eiffel语言实现的一个轻量级音乐播放器的特定版本,这表明该播放器可能注重代码的可读性、可维护性和测试覆盖率。 首先,我们来了解一下OpenHarmony中的音频框架。...

    ETS1700贺德克温控使用说明.pdf

    ETS1700贺德克温控使用说明.

    A Study of Erlang ETS Table

    将哈希表调整到2^32个桶,并由Judy数组管理,可以产生最一致的性能改进,并且仅使用比常规哈希表多约6%的内存。这种技术不仅适用于Erlang环境下的ETS表,还可能对其他应用程序带来实质性的性能提升。特别是对于那些...

    KNX编程软件 ETS5 Professional 版本 5.7.4(官网下载)

    KNX是一种国际标准(ISO/IEC 14543-3),它允许不同厂商的设备在一个网络中互相通信,实现照明、温控、遮阳、安防等系统的集中控制。 在版本5.7.4中,ETS5 Professional提供了一系列增强的功能和优化,以提升工程师...

    ETS破解插件

    EIB系统调试软件ETS的破解小插件,可以免费用ETS了!

Global site tag (gtag.js) - Google Analytics