【问题标题】:Storing HTML in MySQL using Java使用 Java 在 MySQL 中存储 HTML
【发布时间】:2016-05-03 22:54:08
【问题描述】:

所以,我现在正在做一个项目,我应该将网页存储在数据库中,我使用crawler4j 进行爬网,并使用ProxoolMySQL Java Connector 连接到我的数据库。

当我测试我得到的应用程序时:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'HTMLData'

HTMLData 列是TEXT

当我将HTMLData 列更改为LONGTEXT 时,错误消失了,但我担心它可能会在未来再次出现。

知道如何完美地做到这一点,这样我以后就不用担心这个错误(或任何其他类似的错误)?

谢谢:)

【问题讨论】:

  • 我可能是错的,但我倾向于认为,如果您担心会超出 TEXT(或特别是 LONGTEXT)列的大小,最好保存这些项目作为静态文件,只是将路径存储在数据库中。即使我错了,最好将它们保存在数据库中,我同意 duffymo 的观点,即您应该重新检查您的设计。

标签: java mysql html storage


【解决方案1】:

原则上,一个 LONGTEXT 字段可以保存 4GB 数据,但可能还有其他较小的限制:例如来自MySQL documentation,“可以传入或传出 MySQL 5.1 服务器或客户端的最大可能数据包为 1GB。”。我认为这实际上意味着您将在 LONGTEXT 中获得大约 1GB 左右(即使那样,您也必须重新配置我认为的默认最大数据包大小)。

不管这个限制如何,HTML 通常都能很好地压缩,所以如果您的框架允许这样做,我建议您实际上考虑使用 LONGBLOB 并在存储之前通过 Deflater 运行数据(并在检索时通过 Inflator)。

【讨论】:

    【解决方案2】:

    LONGTEXT 可以容纳 4,294,967,295 字节,见http://dev.mysql.com/doc/refman/5.1/en/storage-requirements.html

    我会说您不想存储大于 4GB 的 HTML 文档吗?

    (编辑,用 1 个字节超出字节数,当然是 2^32 -1

    【讨论】:

    • 但是请看下面我的回答——您实际上可能无法通过 JDBC 连接器将 4GB 数据合为一体。
    • 我的意思是它对于 HTML 来说已经足够了,对于任何合理的 HTML 文档来说,即使 1 GB 也应该是过度的。达到 65K 的限制 OK,MEDIUMTEXT 应该足够了,标准 max_allowed_pa​​cket 的 16MB 已经非常适合纯 HTML。
    【解决方案3】:

    对我来说,这听起来不是一个好的设计。为什么必须将 HTML 存储在数据库中? IT 感觉就像它从视图到持久性的每一层都贯穿始终。

    JSP 是 HTML 页面的动态模板;为什么不直接使用 JSP?

    这是一个值得重新思考的设计。

    【讨论】:

    • 它们可能不是他自己的页面。即便如此,即使对于爬虫/搜索机器人,也可以更轻松地将它们保存为文件并仅将解析/相关的数据存储在数据库中。
    • 正如 Wrikken 所说,这是为了爬行。 :)
    • 如果是,请不要存储 HTML,这是一个非常大的百分比垃圾。我不知道您到底在寻找什么,但解析文本、标题以及您需要的任何内容并将其存储。如果您愿意,可以保留实际下载的 HTML 的文件备份。
    • 如果您正在执行任何类型的严重爬网,存储整个网页的成本将非常高 - 互联网存档需要约 2 PB (archive.org/about/faqs.php) 来存储它存档的所有内容,这很昂贵.您应该处理您抓取的内容,以去除不需要的所有内容,以最大限度地减少必要的磁盘空间。您还可以研究 Lucene 之类的东西来构建您正在抓取的数据的索引 (lucene.apache.org),这将为您完成很多工作。
    猜你喜欢
    • 2019-04-20
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    相关资源
    最近更新 更多