【问题标题】:efficient way to store large amount of html content存储大量 html 内容的有效方法
【发布时间】:2017-09-22 14:30:13
【问题描述】:

我有一个数据库,其中有一个包含“标题、专辑、艺术家...”等字段的表,它还有许多包含每条记录的 html 内容的字段(最多 30 个)。

问题是,这个数据库有数万条记录,并且由于 html 内容而有数百兆字节大。由于 sqlite 文件的大小,搜索非常慢(在事务中插入新元素也非常慢~10-30 秒,对于 200 个新行)。第一个 LIKE 查询可能需要 10-15 秒,其他搜索足够快(创建索引并且工作正常)。当我从数据库中删除 html 内容时,搜索总是即时的。

所以问题是,存储额外的 html 内容的最佳方式是什么?现在我可以选择将它存储在单独的文件中,但它可以在未来生成多达 600k 的文件,而且创建起来很慢。将文件存储在 zip 存档中可能会达到其文件数量限制。其他选项是按表行压缩文件,将 html 存储在同一数据库中的单独表中,或为 html 内容创建单独的数据库文件。

什么会给我最好的表现?还是有其他更好的选择?我需要快速插入、更新和搜索。

【问题讨论】:

  • 对于慢速插入,它们是否都包含在一个事务中?如果没有,这会大大减慢速度。
  • 是的,插入被包装在一个事务中,每个事务需要 6-20 秒。我的交易记录不能超过 250 条,因为我会出现内存不足错误。仅当我将 html 放入数据库时​​,插入速度才慢,否则插入速度很快。
  • 您是否根据 html 字段进行搜索?你的索引是否覆盖了 html 字段?
  • 我不根据html字段进行搜索,只根据名称进行搜索,已编入索引
  • 那么,至于加速插入,您可能在选项方面受到限制。如果单独行的 html 字段之间有很多公共数据,您可以考虑尝试将其抽象出来一点,以便您只提供指向公共数据的链接,而不是每次都复制该数据。跨度>

标签: android sqlite large-data


【解决方案1】:

您可以考虑做一些不同的事情:

  • 将数据拆分到单独的表中。然后,您可以在表之间进行 1:1 映射,并且仅在必要时加入它们,从而在没有它们的情况下加快查询速度。
  • 检查您的索引。仅仅因为你拥有它们并且你认为它们在工作,并不意味着它们在工作。如果我没记错的话,sqlite 每个查询最多使用一个索引,因此您需要确保您拥有可用于您正在使用的查询的最佳索引。 ANALYZE 命令可以帮助解决这个问题。

【讨论】:

  • (1) 我正在考虑将它分成两个表,但是这样可以提高搜索速度吗?不是因为文件大而导致速度慢吗? (2) 索引有效,查询只比较一列,如果我使用 '%search%' 而不是 'search%',则查询速度会有所不同,根据文档,第一个不能使用索引
  • (1) 当您不确定返回 html 数据时,搜索速度可能会有所提高。如果您在搜索时总是需要返回 html 数据,这不会给您太多 (2) 'search%' 将 always 比 '%search%' 快,因为它可以抛出在检查前几个字符(或者最坏的情况下,检查第一个 n 个字符的搜索词的前 n 个字符)后排除错误匹配,而不必扫描整个字段。跨度>
  • 我不会在搜索时返回 html 内容。我只在显示特定记录时使用它。我认为缓慢是因为文件的大小,搜索必须跳过整个文件。当我不把 html 放在那里时,速度很快。根据文档,“%search”不使用索引。
  • 我知道 '%search' 没有按照文档使用索引,我只是指出使用它来测试搜索是否更快是有缺陷的,因为它会即使没有索引也慢。至于将数据放在不同的表中,父表的记录会更接近(物理上在磁盘上),因此会减少硬盘的寻道时间。
【解决方案2】:

经过几天的实验,我得出了这个结论:

  • 一个数据库文件和一个表是最慢的(最多 10 秒)
  • 一个包含两个表的数据库在最坏情况下的速度是一个表的两倍
  • 最快的是拥有两个独立的数据库文件。一个用于搜索所需的数据,另一个用于巨大的 html 数据。这在最坏的情况下几乎是即时的 ~300 毫秒,而在正常使用中它是即时的

所以我建议在这种情况下使用两个单独的数据库文件。如果有人没有提供更快/更好的解决方案,我会接受这个作为答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2014-01-29
    • 2014-05-22
    • 1970-01-01
    相关资源
    最近更新 更多