2012-11-15 109 views
0

我正在Windows服务器上使用JavaScript,MySQL和PHP进行RIA。关于用大量数据构建数据库的建议

我有5000个相同结构的数据集,我想放在数据库中。 5张表对于数据来说已经足够了,除了一张表格以外,所有这些数据都是相当小的,对于一个典型的数据集,这个表格将会有300,000多条记录。

另外,500位用户将只能读取从这些数据集编译的统计信息。这些统计数据由PHP提供(不允许直接访问)。而且,他们对数据的访问也不尽相同。一些用户只能使用一个数据集,其他一些只能使用一个数据集。

用户看到的结果相对较小;大多数请求会返回100行以下,最大的请求将大约700行。所有请求都是通过一个JavaScript RIA,它使用Ajax连接到PHP,后者又连接到数据,完成它的任务并输出JSON作为响应,然后JavaScript将相应地显示。

在思考如何构建这样,三个选项出现了:

  1. 把数据集相同的表所示。这可以很容易地在最大的桌子上给我15亿条记录。

  2. 为每个数据集使用不同的表格。这将限制最大的表格大小,但可能意味着25,000个表格。

  3. 忘记数据库并坚持专有格式。

我倾向于#2的几个原因。

  1. 我很关心使用非常大的表格(例如:查询速度,实施限制等)的问题。

  2. 单独的桌子看起来更安全;它们限制了错误和结构变化的影响。

  3. 单独的表格允许我使用MySQL的表级安全性,而不是实现我自己的行级安全性。这意味着更少的工作和更好的保护;例如,如果在没有行级别安全性的情况下意外发送查询,则用户可能会收到未经授权的数据。与表级安全性不同,因为数据库将会无效地拒绝查询。

这些是我的想法,但我想你的。你认为这是正确的选择吗?如果不是,为什么不呢?我错过了什么考虑?我应该考虑其他平台,如果可扩展性是一个问题?

+1

mysql确实支持分区:http://dev.mysql.com/doc/refman/5.1/en/partitioning.html –

+0

谢谢。我正在研究这个。分区级别的安全性(如果可能的话)会摇摆:D – RonaldBarzell

回答

1

1)我很担心使用非常大的表格(例如:查询速度,实施限制等)的问题。

DBMS是否必须...

  • 搜索通过一个表中的大指标,
  • 或搜索右表和然后搜索通过该表

的比较小的索引...大概不会使性能方面差异很大。如果有的话,第二个案件有一个无证的组件(查找正确的表的表现),所以我不愿意完全信任它。

如果你想对数据进行物理分区,从版本5.1开始MySQL supports that directly,所以你不必通过单独的表来模拟它。

2)单独的桌子看起来更安全;它们限制了错误和结构变化的影响。

这就是备份的目的。

3)单独的表格允许我使用MySQL的表级安全性,而不是实现自己的行级安全性。

正确的是,通过视图或存储过程可以实现类似的效果。总而言之,我的直觉是用单个表格去除,除非事先知道这些数据集在结构上有足够的差异以保证单独的表格。顺便说一句,我怀疑你可以使用专有格式做得更好,而且数据库比较完善。

+0

谢谢;这些都是好点。关于查找正确的表,我只是简单地用数据集命名表(每个数据集都有一个唯一的名称),并将其构建到PHP查询中的字符串中(例如:“SELECT $ dataSet FROM ...”) 。我同意备份给予我们一定程度的保护,但在恢复之前,影响仍然是一个问题,所以限制最初的命中是最好的。 – RonaldBarzell