3

只是对个人经验和对限制的理解等的查询。例如,如果我有一个包含 100,000 行(条目)的文本文件和一个包含 100,000 个相同条目的数据库,每个条目包含一个单词且没有双精度词,我会是哪个能够更快地处理并且哪个会消耗最少的内存?

据我了解,我可以在开始时将整个文本文件加载到内存中的列表中(仅约 1MB。)此信息用于确认字符串内容。字符串中的每个单词(由空格分隔)都必须存在于文件中,否则它会更改为列表中最相似的条目。简而言之,它是非常高级的自动更正。然而,可悲的是,我不得不重新发明轮子。

所以无论如何,我的问题仍然存在。哪个是我最好的选择?我正在尝试使用尽可能少的外部模块,所以我想我可能会坚持使用 SQLite(它是标准的,不是吗?尽管再多一个也无妨)如果换行符分隔的文本文件既是我最快的也是最经济的选项,我应该以特定的方式处理它们吗?我希望这个脚本能够在一秒钟内执行至少 100 次匹配操作,如果使用 Python 等语言在计算上是可行的。

4

2 回答 2

1

如果您将所有 100,000 个单词加载到 Python 集中,确定给定单词是否在该集中将是O(1)- 它不会比这更快。启动 python 应用程序时的惩罚将是延迟,因为 Python 必须加载所有数据,大约需要几秒钟。

如果将单词加载到 SQLite(或任何其他 SQL 数据库)中,则需要基于哈希的索引来实现相同的性能顺序。我不确定 SQLite 是否具有该索引类型。MySQL 没有。

SQL 数据库通常没有查找“相似”词的功能,因为每个用户都有自己的“相似”定义。在 Python 中实现它会容易得多,但也许您选择的数据库有一些正是您正在寻找的东西。

最佳选择取决于您未提及的其他要求。100,000字经常变化吗?其他人(非程序员)是否需要维护他们?如果是这样,数据库可能更方便,您可能希望为此牺牲速度。另外,您多久启动一次 Python 应用程序?如果你运行它来测试单个单词,你会为每个单词等待几秒钟。另一方面,如果您编写一个守护程序/服务器并添加一个接口(套接字、HTTP 等),您只需加载一次数据,您就可以向它抛出大量单词。

于 2012-12-15T15:57:07.000 回答
1

免责声明:与性能一样,不要依赖假设,而是衡量。

话虽如此,这里有一些注意事项:

  • 无论您使用数据库还是纯文本文件,数据结构和算法的选择都可能对性能产生重大影响。例如,在任何一种情况下,通过列表进行蛮力搜索都是低效的。
  • 优化的内存数据结构可能比磁盘数据库更快。
  • 另一方面,数据库解决方案可以更有效地使用内存。
于 2012-12-15T16:09:24.547 回答