【问题标题】:Improving query performance of of database table with large number of columns and rows(50 columns, 5mm rows)提高多列多行数据库表的查询性能(50列,5mm行)
【发布时间】:2012-01-24 01:01:09
【问题描述】:

我们正在为我们的用户数据构建缓存解决方案。数据当前存储在 sybase 中,分布在 5 - 6 个表中,但是使用休眠在其之上构建的查询服务,我们的性能非常差。为了将数据加载到缓存中,需要 10 到 15 个小时。

所以我们决定在另一个关系数据库 (UDB) 中创建一个 50 - 60 列和 5mm 行的非规范化表,首先填充该表,然后使用 JDBC 从新的非规范化表填充缓存,这样就可以构建我们了缓存较低。这给了我们更好的性能,现在我们可以在大约一个小时内构建缓存,但这也不能满足我们在 5 分钟内构建缓存的要求。使用以下查询查询去规范化的表

select * from users where user id in (...)

这里的用户 id 是主键。我们也试过查询

select * from user where user_location in (...) 

并在位置上创建了一个非唯一索引,但这也没有帮助。

那么有没有一种方法可以使查询更快。如果没有,那么我们也愿意考虑一些 NOSQL 解决方案。

哪种 NOSQL 解决方案适合我们的需求。除了大桌子,我们每天都会在桌子上进行大约 1 毫米的更新。

我已经阅读了有关 mongo db 的信息,似乎它可能会起作用,但没有人发布过任何使用 mongo db 的经验,其中包含如此多的行和如此多的每日更新。

请让我们知道您的想法。

【问题讨论】:

  • 对我来说,您似乎遇到了一个相当基本的问题,而现在您正试图通过大量额外的技术堆栈来解决它。为什么首先需要缓存中的所有数据?您正在对这些数据执行什么样的操作?等等。我怀疑您提供的信息是否足以获得合格的答案...
  • 我们将主要在启动时读取这些数据,然后在创建新用户帐户或对其数据进行更改或删除帐户时定期更新数据
  • 一次所有数据??为什么需要内存中的数据?现代数据库在访问磁盘上的数据方面非常有效......我不明白你在做什么
  • 是的,这就是我想找到哪个数据库将是托管此功能的良好解决方案的原因,它应该能够非常非常快地快速查询...大型数据集

标签: sql mongodb database-performance udb


【解决方案1】:

这里关于 MongoDB 的简短回答是肯定的 - 它可以以这种方式用于在 RDBMS 前面创建非规范化缓存。其他人使用 MongoDB 来存储与您描述的数据集大小相似(和更大)的数据集,并且可以将这种大小的数据集保存在 RAM 中。就您的数据而言,这里缺少一些细节,但它肯定不会超出 MongoDB 的能力,并且是更常用的实现之一:

http://www.mongodb.org/display/DOCS/The+Database+and+Caching

关键是您的工作数据集的大小,因此是您的可用 RAM(MongoDB 将数据映射到内存中)。对于较大的解决方案、编写大量扩展和类似问题,可以采用多种方法(分片、副本集)。

鉴于给出的详细程度,很难确定 MongoDB 将满足您的所有要求,但鉴于其他人已经完成了类似的实现,并且根据给出的信息,它也没有理由不工作。

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 2019-04-17
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 2014-07-03
    相关资源
    最近更新 更多