首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是搜索大文件中一组字符串的存在的可伸缩和实用的方法?

问什么是搜索大文件中一组字符串的存在的可伸缩和实用的方法?
EN

Software Engineering用户
提问于 2014-03-15 00:08:30
回答 2查看 233关注 0票数 3

上下文:我构建了一个应用程序,它根据用户输入生成大约1000个域名。我需要检查他们是否可用,通过匹配一个巨大的解析域名区域文件,这大约是2GB。

我有一个amazon微实例,由于空间限制,无法将文本文件存储在其中。我预计大约100 k-200 k和更多的搜索查询每月。

朴素方法(潜在):1.将文本文件存储在dropbox中。然后获取文件的内容并搜索字符串,并在EC2实例中列出可用的域名。

我只需要检查是否存在域名。我应该把它存储在数据库里吗?

一些信息:目前有1亿的网站名称注册根据Verisign.com。我分析过的域名每一行都有一个。比如:

  • 谷歌
  • 苹果
  • 脸书
  • STACKOVERFLOW等

处理这个问题的最好和实用的方法是什么?理想情况下,检查只需几秒钟。但在这一点上,我对任何可行的事情都没意见。

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2014-03-15 01:03:51

a)索引引擎,如Lucene

( b)布卢姆滤波器http://en.wikipedia.org/wiki/Bloom_过滤器

( c)您可以使用一个简单的密钥散列方案,并通过一个简单的“散列模块N”将您的域拆分成多个(简单)数据存储。

  • 顺便说一下,2GB太小了。你可以很容易地在记忆中完成所有的事情。
  • 此外,由于您已经将字符串规范化为标准格式,所以我将集中精力存储和查找字符串的散列,而不是字符串本身。

..。

完全公开:我可能会把它们存储在数据库中。

票数 3
EN

Software Engineering用户

发布于 2014-03-15 00:35:31

我应该把它存储在数据库里吗?

这将是最简单的解决办法。查找轻量级(非事务性)数据库库。

另一个想法是将区域文件转换为压缩的word列表,将每个域名视为"word“。这将给您更好的压缩,如果您选择正确的方案,您应该能够得到快速和准确的查找,而不保留整个“文件”在内存。

以上内容的一个不同之处是将名称组件视为单词,并将其视为自由文本搜索问题。建立一个反向索引,并将搜索域名视为搜索一组单词;例如,"www.example.com“是搜索"www”、“示例”和"com“。这要复杂得多,但它可能提供更好的整体压缩,并允许您执行其他查询。

有很多关于文本搜索的文献.

将(原始)文件放入外部文件服务并获取/搜索它是一个糟糕的想法。通过互联网将2Gb文件从一台计算机传送到另一台计算机需要花费大量时间.你可能最终会为你正在使用的I/O带宽付费。你最好提前支付亚马逊基础设施上的存储费用。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/232450

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档