【发布时间】:2011-07-12 06:39:04
【问题描述】:
过去几个月我一直在学习 Ruby on Rails,之前没有任何编程经验。最近,我一直在考虑数据库优化和表组织。我知道有很多关于这个主题的好书,但我通常会通过示例/边做边学。
这是一个假设的情况:
假设我正在为一个拥有 250,000 名成员(用户)的小众社区构建社交网络。用户可以参加活动。假设有 50,000 个过去/现在/未来事件。与 Facebook 活动非常相似,用户可以参加任意数量的活动,并且一个活动可以有任意数量的参与者。
在数据库中,会有一个用户表和一个事件表。不知何故,我必须在用户和事件之间创建关联。我可以在用户表中创建一个“事件”列,这样每个用户行都将包含一个事件 ID 的散列,或者我可以在事件表中创建一个“参加者”列,这样每个事件行都将包含一个用户 ID 的散列.
然而,这些解决方案似乎都不理想。在用户的个人资料页面上,我想显示与他们关联的事件列表,如果我在事件表中包含“参加者”列,则需要扫描 50,000 个事件行以获取所述用户的用户 ID。同样,在活动页面上,我想显示活动的参与者列表,如果我在 users 表中包含“events”列,则需要扫描 250,000 个用户行以获取所述活动的活动 ID。
选项 3 是创建第三个表,其中包含每个活动的参与者信息 - 但我不知道这将如何解决任何问题。
这些不是问题吗? Rails 使访问所有这些信息变得容易,但我想我担心规模。我完全有可能低估了现代数据库/服务器等的速度和处理能力。扫描 250,000 个用户行以查找特定事件 ID 需要多长时间 - 10 毫秒? 100 毫秒? 1000 毫秒?我想这还不错。我是不是想多了?
【问题讨论】:
-
通过适当的索引,一个查询可以在一秒钟内处理 5000 万条记录。
标签: mysql ruby-on-rails optimization