【发布时间】:2012-09-13 03:52:15
【问题描述】:
也许我的问题将被关闭,因为它不够“建设性”,但无论如何......我已经搜索过答案,但其中大多数都过于笼统。对于我的硕士论文项目,我必须抓取大量(即数千个)网页并将它们完全存储在数据库中。这是必要的,因为我必须以不同的方式分析它们,尝试几种机器学习算法并以不同的方式解析它们。目前,我正在为此使用 SQlite 数据库,并结合 Django 作为首选的 Web 框架。
我已将单个网页的整个 HTML 数据放入 Django TextField,即对于每个网页,数据库表中都有单独的行,并且所有网页的内容都存储在表的单个列中。现在的问题是查询和排序数据,尤其是迭代数据非常慢。到目前为止,我已经抓取了大约 1000 个网页,并且数据库文件的大小已经超过 2 GB。此外,我的 4 GB RAM 被完全填满,我的电脑(Macbook Pro 2009 年中,Core2Duo 2.26 Ghz,500 GB 硬盘,OSX 10.8)变得无响应。如果我限制要预缓存的项目数量,那么处理数据会变得更慢,因为查询数量会增加。由于我必须抓取更多数据,因此我当前的设置无法很好地扩展。
我现在的问题如下: 如何更有效地存储我的 HTML 数据,以便更快地完成数据查询?切换到另一个 RDBMS(如 MySQL 或 PostgreSQL)是否有意义?或者你会推荐一个面向文档的数据库系统,比如 MongoDB?到目前为止,我只有使用 SQlite 的经验,所以我真的不知道该使用什么。由于我的硕士论文的截止日期越来越近,我没有时间尝试许多不同的设置。
为了帮助您帮助我,这里有一些进一步的要求:
- 与 SQlite 相比,查询大型 HTML 数据的性能更高,同时不会占用我计算机的所有内存(工作负载无法分配到其他计算机)
- 与 Django 或多或少的良好集成
- 这只是研究工作,因此它永远不会在生产环境中运行,而只能在我的计算机上运行(可能也在我教授的计算机上)
如果你能帮助我决定我应该走哪个方向,那就太好了,因为我对这么多的可能性感到不知何故迷失了方向。非常感谢您! :)
【问题讨论】:
-
你在html页面中查询的是什么数据?您正在执行一些基本的文本搜索吗?
-
@Jeremy 文本搜索是其中的一部分,是的,但我还必须分析网页的 HTML 结构并将其用作几种机器学习算法的训练数据。这就是我必须存储网页的原因完整,而不仅仅是文字内容。
-
许多数据库(MySQL、SQLAnywhere、MS-SQL Server 等)提供内置函数来帮助解析 XML 数据,这可能会有一些用处(前提是 HTML 格式良好... )。从理论上讲,这会缩短您的查询时间,具体取决于您所追求的...
-
另一种想法是根据“典型”组件将网页分开,并将它们分开存储(即分别存储“head”和“body”节点)。如果有必要,这将在查找其中一项内容时缩短查询时间。
-
@PeterStahl lxml 看起来可以正常工作,但是使用原生支持 XML 的数据库的想法是,它不仅可以减少执行查询所花费的时间,还有在数据库和程序之间传输结果的时间(这取决于结果集的大小,可能非常重要)。你现在对数据库进行什么类型的操作?选择哪里喜欢?正则表达式?
标签: database django sqlite database-design document-oriented-db