python中的文本或数据库,速度和资源消耗

时间:2012-12-15 15:28:57

标签: python database text python-2.7

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

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

所以无论如何,我的问题仍然存在。哪个是我最好的选择?我正在尝试使用最少的外部模块,所以我想我可能会坚持使用SQLite(它是标准的,不是吗?虽然还有一个不会受到伤害)如果换行分隔的文本文件是我最快和最经济的选项,我应该采用哪种具体方式处理它们?我希望这个脚本能够在一秒钟内执行至少100次匹配操作,如果用Python等语言可以计算出来的话。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

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

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

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