【发布时间】: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