【问题标题】:Best solution for fast insertion and searching in MySQL for large no. of rows?在 MySQL 中快速插入和搜索大号的最佳解决方案。行数?
【发布时间】:2015-05-29 10:03:47
【问题描述】:

我们计划在我们的 Web 应用程序中实现一项功能,该功能将使用户能够进行搜索并将所有匹配记录的 ID 保存在数据库 (MySQL - INNODB) 中作为“列表”。结果可能以百万计。我们希望用户能够保存多达 100 万个 ID。它必须是实时的(最多 5-10 秒的延迟是可以接受的)。此列表随后可用作与现有过滤器组合的另一个过滤器。

我们不需要从客户端传递这些 ID,因为可以在服务器端进行相同的搜索来检索这些 ID。但是,由于搜索结果可能会发生变化,因此以后无法重复使用相同的搜索来获取这些 ID。

我们有几千个活跃用户,预计不会有很多人创建这么大的列表,但随着时间的推移,总数没有。保存在这些列表中的 id 可以增长到数亿。

服务器的 RAM 比完整的数据库多(几百 GB)。它还使用SSD。

以下是我们需要解决的问题:

- Saving up to 1 million ids in DB (within few secs)
- Using these IDs as a search criteria with other filters (this additional criteria shouldn't slow down the searches by more than few secs)

这似乎是一些可能的解决方案:

解决方案一:

  • 有一个单独的表,其中包含用户 ID、列表 ID、文档 ID
  • 将 ID 保存在单独的行中(1 个列表可能有 100 万行)
  • 一定大小后的分区表

优点:这个表可以很容易地在以后的 JOIN 条件中使用,并且带有索引的搜索性能应该很快。

问题:插入会很慢 - 我知道有一些方法可以加快插入速度,但它仍然可能需要超过几秒的时间,尤其是在表格增长时。

解决方案 2:

  • 将所有 ID 保存在一行中
  • 使用 MapReduce 等技术将这些 ID 作为 IN 参数分块传递给查询,以实现快速搜索

好处:插入会很快。

问题:使用 MapReduce 可以提高搜索性能,但它会给服务器带来大量负载,尤其是当许多用户开始进行此类搜索时。

关于什么是最好的方法有什么建议吗?有没有其他可能的方法来满足这种情况?

【问题讨论】:

  • 如果有人能对此发表评论,我们将不胜感激。
  • 必须使用 MySQL 吗?因为你可以使用 mongodb 来提高你的读/写性能。
  • 它是一个已经在 MySQL 中的大型应用程序,因此不能因为这个特性而仅仅转移到 Mongodb。

标签: mysql performance hadoop


【解决方案1】:

在渐进式过滤中保存中间结果——我从未见过它成功使用过。只需构建完整的查询并每次执行即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    • 2019-09-24
    • 2011-02-22
    • 1970-01-01
    • 2010-10-20
    相关资源
    最近更新 更多