我正在创建一个将存储 100.000(将来可能会更多)用户的数据库。虽然这显然发生在每个用户 1 行的表中,但每个用户都可以(并且将)存储数百个项目。在编程语言中,这意味着用户有 2 个整数数组(或一个二维数组):一列用于 itemid,一列用于金额。
我的直觉告诉我创建一个表来保存所有这些项目,行如 (userid, itemid, amount)。然而,这将导致一个巨大的表。200.000 个用户,每个用户有 250 个项目……一张表中有 5000 万个条目。这一点,再加上桌子会持续快速变化,这让我感到害怕。(有多快?我估计每秒最多可进行 100 次修改。)
通常有 100 到 2000 个用户,所有用户都添加和删除项目,并修改数量。这些操作可以并且将会在编程代码中发生。它将如下进行:
值得注意的是,用户可以存储的项目数量是有上限的。
除了使用单独的表格,还有其他选择吗?也许将值保存在格式化的文本字符串中?或者这是使用 MySQL 数据库实际上是一个坏主意™的实例之一?
感谢您的时间和见解。
建立 RDBM 是为了处理这些类型的关系和操作。另外,分别存储用户和项目将有助于详细报告(例如:今天添加的项目数量)。
使用优化的索引,读取每个用户的许多项目只需一次查找。项目表可以被索引以连续存储相关项目(每个用户),从而提供类似阅读场景的数组。只需确保使用页面填充以允许将来的更新/插入/删除。
RDBM 非常快,每秒可以处理十万次操作,所以这可能不是问题。当您的项目位于不同的表上时,与将项目存储在与用户相同的行中的文本列(作为数组)中的情况相比,对每个项目进行的更新的性能更好。这将为您提供更快的更新、更少的操作所需的内存、更快的锁定和释放(并且您可能不必锁定各自的用户)、更小的读/写等......
小智 3
将这些项目保留为单独的表。您需要对许多并发会话进行快速响应。如果使用 Oracle,您可以制作一个不错的 IMDB 缓存场景。在这种情况下,您可以在连接时为用户预加载缓存,从而使内存中高频更新的行可用。要使用此功能,您确实需要 Oracle 11gR2。请参阅Oracle 内存数据库缓存它为您提供了一个非常可扩展的解决方案。响应时间可以是亚毫秒级。
| 归档时间: |
|
| 查看次数: |
15408 次 |
| 最近记录: |