上下文:我构建了一个应用程序,它根据用户输入生成大约1000个域名。我需要检查他们是否可用,通过匹配一个巨大的解析域名区域文件,这大约是2GB。
我有一个amazon微实例,由于空间限制,无法将文本文件存储在其中。我预计大约100 k-200 k和更多的搜索查询每月。
朴素方法(潜在):1.将文本文件存储在dropbox中。然后获取文件的内容并搜索字符串,并在EC2实例中列出可用的域名。
我只需要检查是否存在域名。我应该把它存储在数据库里吗?
一些信息:目前有1亿的网站名称注册根据Verisign.com。我分析过的域名每一行都有一个。比如:
处理这个问题的最好和实用的方法是什么?理想情况下,检查只需几秒钟。但在这一点上,我对任何可行的事情都没意见。
发布于 2014-03-15 01:03:51
a)索引引擎,如Lucene
( b)布卢姆滤波器http://en.wikipedia.org/wiki/Bloom_过滤器
( c)您可以使用一个简单的密钥散列方案,并通过一个简单的“散列模块N”将您的域拆分成多个(简单)数据存储。
..。
完全公开:我可能会把它们存储在数据库中。
发布于 2014-03-15 00:35:31
我应该把它存储在数据库里吗?
这将是最简单的解决办法。查找轻量级(非事务性)数据库库。
另一个想法是将区域文件转换为压缩的word列表,将每个域名视为"word“。这将给您更好的压缩,如果您选择正确的方案,您应该能够得到快速和准确的查找,而不保留整个“文件”在内存。
以上内容的一个不同之处是将名称组件视为单词,并将其视为自由文本搜索问题。建立一个反向索引,并将搜索域名视为搜索一组单词;例如,"www.example.com“是搜索"www”、“示例”和"com“。这要复杂得多,但它可能提供更好的整体压缩,并允许您执行其他查询。
有很多关于文本搜索的文献.
将(原始)文件放入外部文件服务并获取/搜索它是一个糟糕的想法。通过互联网将2Gb文件从一台计算机传送到另一台计算机需要花费大量时间.你可能最终会为你正在使用的I/O带宽付费。你最好提前支付亚马逊基础设施上的存储费用。
https://softwareengineering.stackexchange.com/questions/232450
复制相似问题