仅包含整数的大型数据库表的最佳选择(必须使用 SUM() 或 AVG() )

发布于 2024-11-16 13:56:47 字数 437 浏览 6 评论 0原文

我目前正在 LAMP 下使用 MySQL 表进行在线游戏。

其中一张表很大(很快就有数百万行)并且只包含整数(ID、时间戳、布尔值、分数)。

我尽一切努力永远不必加入这张桌子。但是,我担心可扩展性。我正在考虑将这个单一表移动到另一个更快的数据库系统。 我使用中间表来计算分数,但在某些情况下,我必须直接对该表的某些筛选行集使用 SUM() 或 AVERAGE()。

对于您来说,该表的最佳数据库选择是什么?

我的要求/规格:

  • 该表仅包含整数(大约 15 列)
  • 我需要按某些列进行过滤
  • 我希望拥有唯一的键
  • 拥有“INSERT ... ON DUPLICATE UPDATE”可能会很好,但我想我的脚本可以自己管理。
  • 我必须使用 SUM() 或 AVERAGE()

谢谢

I'm currently using a MySQL table for an online game under LAMP.

One of the table is huge (soon millions of rows) and contains only integers (IDs,timestamps,booleans,scores).

I did everything to never have to JOIN on this table. However, I'm worried about the scalability. I'm thinking about moving this single table to another faster database system.
I use intermediary tables to calculate the scores but in some cases, I have to use SUM() or AVERAGE() directly on some filtered rowsets of this table.

For you, what is the best database choice for this table?

My requirements/specs:

  • This table contains only integers (around 15 columns)
  • I need to filter by certain columns
  • I'd like to have UNIQUE KEYS
  • It could be nice to have "INSERT ... ON DUPLICATE UPDATE" but I suppose my scripts can manage it by themselves.
  • i have to use SUM() or AVERAGE()

thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

树深时见影 2024-11-23 13:56:47

只需确保您有正确的索引,这样选择应该很快

Just make sure you have the correct indexes on so selecting should be quick

且行且努力 2024-11-23 13:56:47

表中的数百万行并不是很大。如果您按照 @Tom-Squires 的建议对相关键建立索引,那么在选择、过滤或更新插入数据时就不应该出现任何问题。

不过,聚合查询(sum 和 avg)可能会带来问题。原因是它们需要全表扫描,因此需要多次从磁盘提取数据到内存。有几种提高速度的方法:

  1. 如果您的数据不经常更改,那么在代码中缓存这些查询结果可能是一个很好的解决方案。
  2. 如果它经常更改,那么提高性能的最快方法可能是确保数据库引擎将表保留在内存中。快速计算预期大小:15 列 x 8 字节 x 百万 =~ 100 MB - 这并不是一个真正的问题(除非您在共享主机上)。如果您的 RDBMS 不支持针对特定表进行调整,那么只需将其放入不同的数据库模式中 - 应该不会有问题,因为您没有对此表进行任何联接。大多数引擎都允许您对其进行调整。

Millions of rows in a table isn't huge. You shouldn't expect any problems in selecting, filtering or upserting data if you index on relevant keys as @Tom-Squires suggests.

Aggregate queries (sum and avg) may pose a problem though. The reason is that they require a full table scan and thus multiple fetches of data from disk to memory. A couple of methods to increase their speed:

  1. If your data changes infrequently then caching those query results in your code is probably a good solution.
  2. If it changes frequently then the quickest way to improve their performance is probably to ensure that your database engine keeps the table in memory. A quick calculation of expected size: 15 columns x 8 bytes x millions =~ 100's of MB - not really an issue (unless you're on a shared host). If your RDBMS does not support tuning this for a specific table, then simply put it in a different database schema - shouldn't be a problem since you're not doing any joins on this table. Most engines will allow you to tune that.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文