Ruby on rails Ruby设置为存储大量单词并查找

Ruby on rails Ruby设置为存储大量单词并查找,ruby-on-rails,ruby,data-structures,set,Ruby On Rails,Ruby,Data Structures,Set,我正在分析字符串,以检查其中是否有地名。这些字符串可以有字母。所以我们提取连续的字母序列,然后检查这些序列是否存在于位置字典中 这部地名语料库词典大约有45000个地名,最小的是2-3个字符,最大的是24个字符 我最初的想法是将它们存储在一个Ruby集合中并使用include?验证PLACES_集合中是否包含序列 此检查地名的方法是从运行非常频繁的活动作业内部调用的 整个ruby集文件大约为908KB 从作业中加载如此大的一组数据会对内存产生什么影响?是否有延迟加载的选项?或者手动垃圾收集会有帮

我正在分析字符串,以检查其中是否有地名。这些字符串可以有字母。所以我们提取连续的字母序列,然后检查这些序列是否存在于位置字典中

这部地名语料库词典大约有45000个地名,最小的是2-3个字符,最大的是24个字符

我最初的想法是将它们存储在一个Ruby集合中并使用include?验证PLACES_集合中是否包含序列

此检查地名的方法是从运行非常频繁的活动作业内部调用的

整个ruby集文件大约为908KB

  • 从作业中加载如此大的一组数据会对内存产生什么影响?是否有延迟加载的选项?或者手动垃圾收集会有帮助吗

  • 除了数据库存储之外,还有其他的选择吗?(这有性能查询开销)

  • 正如@sergio所观察到的,问题不在于内存(现在1MB没有那么大;大多数智能手机都能处理)。它更多的是关于加载它的频率,而不是加载后对它执行查找的频率
  • 如果位置列表不稳定,或者需要在不重新部署应用程序的情况下进行维护,那么某种类型的DBMS可能是合适的,如果您担心性能,您可以始终将其放在分布式缓存(如数据库前面的Redis)后面
  • 全局集看起来是个不错的选择,后续维护人员很容易理解它


    我对性能的建议是保持简单,只有在您实际遇到性能问题时才对性能进行优化。否则,您就有可能优化错误的内容,并使解决方案变得不必要的复杂。

    您担心今天会加载1MB的文本,而即使是旋转的rust磁盘也可以读取100+MB/s?除非每秒收到数千个请求,并且为每个请求重新加载文件,否则不要担心。在应用程序启动时将其加载到全局状态,您就可以了。使用集合是一个不错的首选。我会用一个Trie来做基准测试。Ruby有本地Trie可用吗?据我所知没有。