为大数据创建数据库表

时间:2013-07-06 11:38:36

标签: database multi-tenant

我正在创建一个客户端管理应用程序,我在其中存储employeeadmincompany的数据。将来数据库将有数百家公司注册。我正在考虑采用最佳的数据库设计方法。

我可以想到两种方法:

  1. 为每个公司单独制作所有应用程序表
  2. 将所有数据存储在应用数据库中
  3. 你能建议最好的方法吗?

    请注意,所有3个表都是基于ID链接的,并且将有数百家公司,每个公司将有许多管理员,每个管理员将有数百名员工。什么是处理安全性和查询性能的最佳方法

5 个答案:

答案 0 :(得分:1)

查询的性能并不太大,取决于表的大小,但它更多地取决于您在该表上的索引。所以你需要根据你的要求放置集群和非集群索引,我可以保证最多10 GB的数据你不会遇到任何问题

答案 1 :(得分:1)

根据您提供的部分信息,您可能会看到 3个规范化表格,以及查找和其他内容等辅助数据。

但是当你设计一个数据库时,你需要考虑更多的点,如安全性,可见性,客户端访问方法等等。

例如,如果要确保隔离,并且不允许用户对其他数据具有任何可见性,则可以为每个公司动态创建架构,动态地为每个架构创建用户和访问权限。然后你需要在DAL中支持这些东西,这实际上会很胖。

DAl的另一种方法可能是暴露始终为一家公司返回子集的视图。

我建议采用规范化方法的一个重要原因是维护将更加容易。

从SQL的角度来看,我没有看到任何性能优势,有很多表或只有3,索引效率和智能DAL会有所不同。

答案 2 :(得分:1)

这是一个经典的问题,分享了我最常见的网络商业服务:讨论所涉及的因素,谷歌“多租户架构。”

您几乎肯定希望将所有公司放入一组通用表中:每个数据表都应引用公司密钥,并且所有查询都应加入该密钥,以及其他标准。这样可以获得最佳的整体性能,并为您节省数百次重复视图,存储过程等的潜在维护噩梦,或者如果您希望添加字段或表格,则必须对数百个表应用相同的结构更改

为了确保您不会无意中混合来自不同客户的数据,通过一组经过验证的存储过程(所有这些都将公司ID作为参数)进行所有数据访问可能会很有用。

数以百计的并行数据库无法很好地扩展:数据库服务器将不断推出表和索引的内存以适应下一个查询,从而导致磁盘抖动和性能不佳。只有痛苦的道路。

答案 3 :(得分:0)

取决于您的应用程序的用例,没有“最佳”方式。 请解释您的应用程序将提供的操作,以便我们进一步了解您的问题。

要存储的数据似乎是结构化的,因此乍一看关系数据库会很好,但要坚持上面标记的点。

答案 4 :(得分:0)

您还没有说过这些数据是如何链接的,或者它们之间是否存在任何链接。但是,猜测一下,你需要3个表。

  1. EmployeeTable
  2. AdminTable
  3. CompanyTable
  4. 每个都有所需的属性,没有其他信息,我无法提供更多的指导。