【问题标题】:Text or database, speed and resource consumption in pythonpython中的文本或数据库,速度和资源消耗
【发布时间】:2012-12-15 15:28:57
【问题描述】:

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

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

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

【问题讨论】:

  • 你忘了定义“进程”。
  • 他说他需要测试列表中是否包含其他单词并找到相似的匹配项。

标签: python database text python-2.7


【解决方案1】:

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

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

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

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

【讨论】:

  • 好吧,现在至少程序将在 24 小时内运行几分钟(计算机每 24 小时重新启动一次以清除内存),因此加载时间并不多如果它是一个额外的几分钟的问题。并且该列表不会经常更改(还)。所以看起来我正在将单词加载到 python 集中!谢谢你的帮助:)
【解决方案2】:

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

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

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

【讨论】:

  • 感谢您的帮助 oefe,蛮力搜索确实听起来很慢,但我不确定是否有替代方案。我将在另一个问题中提出这个问题。我同意,in-memory 听起来确实是一个更好的主意。内存消耗不如速度重要,(现在几乎总是如此)所以我现在将坚持更基本的解决方案。谢谢 ! :)
猜你喜欢
  • 1970-01-01
  • 2012-08-12
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-03
相关资源
最近更新 更多