随机存取存储器中的索引数据库

时间:2013-01-11 00:46:54

标签: c# java .net sql database


我正在为求职系统编写一个小型测试Web应用程序。 我有一张桌子职位空缺(主要谈的桌子)。 我需要快速AJAX更新空缺(在输入控件下方的建议列表中)与用户查询匹配。不同的DBMS提供了强大的编程扩展,如Microsoft SQL Server中的自由文本搜索 ..但我认为扫描物理文件需要花费大量时间。我的想法是基于将整个表 Vacancies 转移到RAM中,所以在我看来,它是有意义的,因为在这种情况下,数据检索需要更少的时间。 因此,如果客户端在文本框中键入类似“专业版”的内容,则建议列表会显示以下建议:        

        -product manager 
        -professional designer 
        -programmer 
        -programmer C#
        -programmer Java
        -property administrator
        -provision expert
       
当用户键入另一个字母“g”时,文本框的值会扩展为“prog” 并刷新列表:         
        -programmer 
        -programmer C#
        -programmer Java
        
为了实现这一点,我计划在节点中创建一个保存值的树索引,其中空缺前缀将扮演索引键的角色,节点值为空缺名称。索引仅使用数据表中的数据一次构建和填充。请看下面我的意思:
      
 "pro" -> {
           "product manager", 
           "professional designer",
           "programmer",
           "programmer C#",
           "programmer Java"
           "property administrator",
           "provision expert" 
           } 
因此,索引构建器必须分析字符串列表并找到空缺名称的最小前缀。 然后,当构建器在先前找到的前缀之后找到带有字母的字符串时,它会创建子树节点(“prog”)(该节点中的数据值计数会随着不断过滤而减少)和将自己添加到父节点(“pro”)
  
"prog" -> {
           "programmer", 
           "programmer C#",
           "programmer Java"} 
           }
你能告诉我关于自然适合解决这个问题的树索引的类型吗? 寻求时间最好的是什么? 感谢

1 个答案:

答案 0 :(得分:2)

这个问题在几年前就解决了,你正在重新创建Lucene

对于你想要的树的类型,你需要的是Patricia Tree或Radix Tree。就将所有数据存储在RAM中而言,这是一个坏主意,因为还有其他应用程序使用RAM而不仅仅是您的索引。目前,我正在剥离某人的自定义数据库,他们认为以这种方式实现并用真正的数据库解决方案替换它是一个好主意。