`
lancelotwjq
  • 浏览: 54801 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

glusterfs中Trie树的使用

 
阅读更多

Trie树,又称前缀数,是一种有序树,经常用来做字典。所以又称字典树。

 

同样,在Glusterfs中,Trie树就作为字典树使用,完成两个功能:

1.判断用户输入的volume option是否存在

2. 若不存在,给出与用户输入最相似的选择,比较人性化。


下面一张来自维基百科 的图片形象的描述了这个数据结构

 

 

图中这颗树存储了"A", "to", "tea", "ted", "ten", "i", "in", and "inn" 共9个单词。

 

Trie树的实现源码在glusterfs/libglusterfs/src/trie.h&trie.c

 

其Trie Node的定义为:

 

struct trienode {
        char             id;
        char             eow;
        int              depth;
        void            *data;
        struct trie     *trie;
        struct trienode *parent;
        struct trienode *subnodes[255];
};

 id        该节点的字母 

 eow = end of word 标识该节点是一个单词的结束。

 depth 表示当前树高/树深

 *data  指向用户数据

 *trie    指向树本身

 *parent指针  指向其父节点

 *subnodes指针数组  指向其子节点,可见最多有255个子节点,和char id的取值范围对应。

 

Trie定义为:

 

struct trie {
        struct trienode   root;
        int               nodecnt;
        size_t            len;
};

 

root 根节点

nodecnt 总节点数

len  

 

下面是相关函数:

trie_new 申请空间,创建一个trie

trie_add  添加word,调用trie_subnode, 逢山开路。

trie_subnode (trienode_t *node, int id) 创建node值为id的trienode

trie_destory 调用trienode_free释放所有节点空间。

trie_walk 调用trienode_walk递归遍历所有节点,对每个节点调用  fn函数。比如trienode_reset,collect_closest函数。

trienode_get_word 从trie树的叶子节点到根节点,获得word字符串。

 

trie_measure_vec,collect_closest

这两个函数是为了实现功能2,即当用户输入的option找不到,为其提供相似的option建议。

这里的代码写的比较乱,不值得看。想研究算法的不如看git 源代码中help.c:const char *help_unknown_cmd(const char *cmd)

核心算法是levenshtein distance(编辑距离)。参见算法导论 problem 15-3

 

 

最后其功能封装后的接口函数是glusterd_check_option_exists (char *key, char **completion) (in xlators/mgmt/glusterd/src/glusterd-volgen.c)

 

 

  • 大小: 23.1 KB
分享到:
评论

相关推荐

    部署GlusterFS分布式存储所使用的本地yum源

    glusterfs 3.8.15版本

    GlusterFS文件系统的搭建和使用

    在安装和配置 GlusterFS 的过程中,需要注意以下几个关键步骤: * 配置 Yum 源:需要将 Yum 源配置到阿里云的 CentOS 7 repository,以便能够顺利地安装 GlusterFS 软件包。 * 安装 GlusterFS 软件包:需要使用 yum...

    glusterfs 管理手册

    GlusterFS管理手册是管理员维护和优化GlusterFS集群的重要参考资料,手册中的信息对于确保GlusterFS稳定运行和性能发挥至关重要。通过阅读和理解该手册,管理员可以充分利用GlusterFS强大的分布式存储能力,构建出...

    GlusterFS系统管理手册中文版

    总之,这份GlusterFS系统管理手册中文版为用户提供了全面的指导,无论你是初学者还是经验丰富的管理员,都能从中获得宝贵的实战经验和技巧,帮助你在GlusterFS的使用过程中少走弯路,提升存储系统的可靠性和效率。

    glusterfs.tar.gz

    在本压缩包`glusterfs.tar.gz`中,包含了适用于CentOS 7平台的GlusterFS安装包及其依赖项,这对于在离线环境中安装GlusterFS特别有用。以下将详细讲解这些组件的作用和安装步骤。 首先,我们来看主要的GlusterFS...

    GlusterFS学习笔记.docx

    客户端可以使用 GlusterFS 提供的 API 或者使用 mount 命令来挂载 GlusterFS 卷。 6. GlusterFS 优点 GlusterFS 的优点包括: * 高性能:GlusterFS 可以提供高性能的存储解决方案,满足大规模数据存储和分析的...

    GlusterFS 101培训课程

    软件测试人员在学习GlusterFS时,将掌握如何使用不同的测试方法和工具进行系统测试,包括功能测试、性能测试、可靠性测试等,以确保GlusterFS系统的高性能和稳定性。 研发人员在本课程中将深入了解GlusterFS的软件...

    glusterfs的那些事-3.4.11

    本文将深入探讨glusterfs中的关键概念——`xlator`,以及其在系统中的作用和重要性。 `xlator`,又称为translator,是glusterfs架构的核心组成部分,它起到了将不同功能模块化的作用。在glusterfs中,每个功能模块...

    GlusterFS3.4.6 RPM 安装包 相关依赖包

    4. **PAM (Pluggable Authentication Modules)**:对于认证服务,GlusterFS可能会使用PAM,因此需要确保系统已安装PAM库。 5. **SELinux**:在RHEL系统中,SELinux通常默认启用,以提供额外的安全层。安装和配置...

    分布式文件系统GlusterFS性能优化研究.pdf

    分布式文件系统GlusterFS性能优化研究中涉及到的...实验结果表明,针对不同类型的读写操作,使用合适的配置项可以显著提升性能,因此在实际部署和维护GlusterFS时应根据具体应用场景和需求,合理选择和配置优化策略。

    glusterfs 5.0

    2. **添加GlusterFS仓库**:由于GlusterFS可能不在默认的Ubuntu仓库中,你需要添加GlusterFS的官方仓库。创建一个新的文件`/etc/apt/sources.list.d/glusterfs.list`,并添加仓库URL。 3. **更新软件源**:运行`...

    GlusterFS 介绍

    转换器是GlusterFS中的关键组件,用于实现数据的处理和优化。性能转换器如ReadAhead、WriteBehind和Threaded I/O等,旨在提高数据读写效率;集群转换器如AFR(Automatic File Replication)、Stripe和Unify,则增强...

    glusterfs 结构体系分析

    GlusterFS的体系结构主要分为几个关键部分,包括客户端与服务器之间的交互、数据流处理以及核心的translator树结构。 #### 二、体系结构分析 ##### (一)结构图解读 **图一:GlusterFS官方结构图** - **无元...

    GlusterFS开发与学习

    - **备份管理**:如何有效地进行数据备份和恢复是使用GlusterFS时需要考虑的一个重要方面。 - **硬件扩容**:随着数据量的增长,如何在不影响正常服务的前提下增加存储容量是一项挑战。 - **服务器故障**:当某个...

    glusterfs安装包-centos6.6

    glusterfs安装包-centos6.6

    glusterfs3.7.9

    3.7.9版本是该系统的一个稳定版本,适合在生产环境中部署使用。这个“全家桶安装包”通常包含了GlusterFS运行所需的所有组件,包括服务器端和客户端软件,以及配置和管理工具。 GlusterFS的核心特性包括: 1. **...

    GlusterFS分布式文件系统

    GlusterFS使用弹性Hash算法(Elastic Hash Algorithm,EHA)来分布数据。这种算法以目录为基本单位进行哈希分布,并利用扩展属性记录子卷映射信息。在创建GlusterFS分布式哈希表(dht)卷时,服务端的brick挂载目录...

    glusterfs的那些事-61

    在运维过程中,使用 GlusterFS 版本7.5时遇到了不少挑战,随着版本更新至9.2,许多问题得到了优化和解决。以下是一些具体的问题及其解决方案: 1. **挂载突然掉线**:在使用Kubernetes(k8s)和Heketi管理GlusterFS...

    GlusterFS分析报告.pdf

    这些特性使得GlusterFS成为了在大规模数据存储和处理领域中具有竞争力的分布式文件系统解决方案。由于GlusterFS在Linux平台的良好支持,以及其对环境的低依赖性,它为那些寻求高效、可靠和经济的存储解决方案的用户...

Global site tag (gtag.js) - Google Analytics