假设我正在存储体育项目的逐场比赛信息:篮球、足球和棒球。数据基本上符合相同的模型:
| play_id | play_type_id | play_description_id | player1_id | player2_id | player3_id |
这些是每项运动都会分享的基本专栏,但还会有更多。有些栏只会被某些体育项目使用——比如player3_id会被足球用来指谁进行了铲球,但从来不会被篮球使用——这些有限使用的栏不会很多,但也有一些。
每个游戏可以有300-1000行(高估计),所以这个表最终可能会增长到数十亿。
我的问题是:
- 我是否应该为每项运动从不同的表格开始,即使列有大约90%的重叠
- 我应该在什么时候考虑对表进行分区?我该怎么做?我正在考虑将2012赛季的所有比赛存档(无论是体育专用表还是全包表)
很抱歉我的帖子不够简洁。这都是一个假设的情况,我只是想弄清楚拥有一张巨大的桌子会有什么缺点,显然性能是一个考虑因素,但桌子的大小在什么程度上值得划分。因为这不是一个真正的项目,所以很难确定拥有这样一张桌子的好处。所以,如果这是一个愚蠢的问题,我很抱歉。
编辑/附加问题:顺便说一句,我以前没有使用过noSQL数据库,但对于这样的项目,这是我应该考虑的吗?假设有一个高速的读取和返回时间将是至关重要的,但它也需要有能力运行复杂的查询,比如"在2002-2013年的夜间比赛中,球员a打了多少个地滚球到二垒,球员B打了多少?">
我会在多个表中分离它。这样它就更灵活了。
如果你想做一些统计,你将能够做比只有一个表更复杂的queries
。
它可能看起来像这个
表播放器
ID | FIRSTNAME | LASTNAME | DATE_OF_BIRTH
-----------------------------------------
1 | michael | Jordan | 12.5.65
表SPORT
ID | NAME | DESCRIPTION
------------------------------------------
1 | Basketball | Best sport in the world
2 | Golf | Nice sport too
表PLAYER_SPORT
SPORT_ID | PLAYER_ID | PLAYER_POSITION_ID
--------------------------------------------
1 | 1 | 1 /* Michael Jordan play Basketball */
2 | 1 | NULL /* Michael Jordan play also Golf */
表PLAYER_POSITION
ID | POSITION | DESCRIPTION | SPORT_ID
-------------------------------------------
1 | Middlefield | Any description.. | 1
就表结构而言,最佳实践是为Mapping play_id和player_id提供另一个表。不需要列player1_id、player2_id和player3_id。只需制作一个具有play_id和player_id列的新表。
我应该为每项运动从不同的表格开始吗尽管会有大约90%的列重叠?
我认为这对你没有多大帮助,对于分段的ed表,单个表的增长率问题会发生,这种分布只会造成延迟,不会解决问题。此外,您将因违反正常形式而失去完整性和一致性
我应该在什么时候考虑对表进行分区?我该怎么办做这个?我想把2012赛季的所有剧本都存档(无论是体育专用的桌子还是全包的桌子)。
您需要使用逻辑数据库分区
我认为在mach-date字段上进行范围划分会有所帮助
有关MySql分区的文档可以在此处找到。
建议使用NoSql需要更多关于您的应用程序的信息,BTW NoSql将提供其优点和缺点。看看帖子可能会有所帮助。