database - 用于在云上构建企业 Web (RIA) 应用程序的数据库架构(单一数据库与客户端特定数据库)

标签 database database-design architecture cloud saas

我们正在努力重写我们现有的 RIA 并重新设计我们的数据库以重新构建它的设计。现在我们对数据库有两种看法:

(此选项适用于基于 SaaS 的托管。)

1) 每个客户的单独数据库。

2) 所有客户的单一数据库。

我们期待大量的数据,我们的一些客户的数据库大小从 2GB 到 10GB 不等。 # of tables are around 100.

我能得到关于我们应该选择哪个的答案吗?

目前我们还没有考虑 NoSQL 解决方案,但我们计划使用 JPA(Java Persistence API)支持大约 4-5 个数据库,目前包括 MySQL、Postgres、Oracle、MSSQL。

P.S:我们可能会利用亚马逊云进行托管。

最佳答案

通常应用于此类 Multi-Tenancy 需求的数据库使用的三种主要技术如下。您已经指定了其中一些。

  1. 每个租户的独立数据库:
    • 成本非常高,易于维护/定制,易于调整,易于备份,易于编码。
  2. 共享数据库但架构不同:
    • 与 (1) 相比成本较低,可能会随着数据库大小的增加而很快遇到问题,每个租户易于个性化,每个租户难以备份/恢复,易于编码。
  3. 共享数据库共享架构:
    • 成本低,一个租户的负载会影响其他租户,安全和应用程序开发是一个挑战,难以对每个租户进行个性化设置,也难以恢复/备份。

我认为以上几点适用于本地托管或云端托管。 如果您看到租户数量增长或数据变大,则 1) 或 2) 更好。我使用了选项 2),并发现它有助于开发和维护。

关于database - 用于在云上构建企业 Web (RIA) 应用程序的数据库架构(单一数据库与客户端特定数据库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15683213/

相关文章:

java - 可空孙子关联的左连接提取导致 hibernate 中的 NPE

database - 支持多个并发用户的文件数据库建议

sql - Oracle 用逗号连接列

java - 如何用Java实现HTTP请求队列

c++ - 将大型单 block 单线程应用程序转换为多线程体系结构的建议?

java - Spring-Boot:依赖注入(inject)取决于配置(和使用接口(interface))

database - WordPress 网站的字符问题

sql - 遗留数据库中的 upsize_ts 列 - 这是什么意思?

mysql - 是否建议添加单独的状态字段来检查完成情况,或者完成者 ID 和日期是否足够?

tsql - 我是否必须显式创建 #temp 表?