AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 61212
Accepted
NibblyPig
NibblyPig
Asked: 2014-03-20 02:21:52 +0800 CST2014-03-20 02:21:52 +0800 CST 2014-03-20 02:21:52 +0800 CST

什么时候每个客户端一个数据库变得不可行?

  • 772

对于我们的其中一个系统,我们拥有敏感的客户数据,并将每个客户的数据存储在单独的数据库中。该系统有大约 10-15 个客户。

但是,我们正在开发一个新系统,该系统将拥有 50-100 个客户,甚至更多。我认为在这种情况下每个客户端拥有一个数据库(用于存储敏感记录和审计历史)可能是不可行的。但是我不知道这是否完全正常,或者是否有另一种维护安全的方法。

对此有什么想法吗?

database-design sql-server-2012
  • 3 3 个回答
  • 7153 Views

3 个回答

  • Voted
  1. Best Answer
    Aaron Bertrand
    2014-03-20T05:30:44+08:002014-03-20T05:30:44+08:00

    管理 100 个或 500 个数据库实际上与管理 5 个或 10 个数据库并没有什么不同——您只需要接受自动化并制定一个可扩展性计划(并且不打算使用每个数据库的高成本功能,例如在所有数据库中进行镜像)客户)。

    在我之前的工作中,我们使用了这种架构,我从来没有想过将两个客户端合并到一个数据库中,尽管其中一些挑战可能是“困难的”。

    最大的好处是独立的恢复模型(a可以是简单的,b可以是完整的等),能够在不中断其他客户端的情况下恢复到某个时间点(或完全删除)客户端,能够无缝移动资源密集型客户端到它自己的存储或完全不同的服务器,几乎没有透明度(你更新一个配置文件或表,告诉应用程序在哪里可以找到该客户端)。

    我在这些帖子中解决了一些反对意见和/或如何解决问题:

    • 在多租户数据库架构中处理越来越多的租户

    • 使用 SQL Server 2008 的多租户数据库?

    • 海量数据库备份自动化

    总而言之,我认为我们中的任何人都无法告诉您管理对您来说变得不切实际的点- 只要知道您遇到任何具体挑战,您都可以单独询问这些问题。

    • 51
  2. Remus Rusanu
    2014-03-20T05:07:00+08:002014-03-20T05:07:00+08:00

    我建议您阅读Multi-Tenant Data Architecture,这是一份讨论您拥有的选项以及优缺点的白皮书。总而言之,它提供了三个选项:

    • 单独的数据库
    • 单独的模式
    • 共享模式

    您现在处于单独的数据库阶段,它提供了最好的分离(租户之间的隔离),但最难管理。当您成长为数百个租户时,您会意识到管理 100 个数据库的后勤工作绝非易事。想想备份恢复(备份文件、作业、计划等的位置)。想想您将如何监控和管理数百个 DB 中的文件分配、使用的磁盘空间和数据库增长。想想在不久的将来,拥有 1000 个租户的高可用性/灾难恢复方案将是什么?1000 个镜像数据库,1000 个日志传送会话?想想如果你的开发团队在 6 个月后来找你说“我知道如何为我们的产品提供这个很棒的功能,我们将使用事务复制!”,你会说什么?“当然,让我建立 500 个出版商,“!管理数百个数据库并非不可能,但如果你打算这样做,你最好提高你的PowerShell技能并立即停止使用 UI 管理工具。

    此外,您需要考虑多个(数百个)数据库对性能和成本有可衡量的影响:

    • 物理磁盘空间的使用效率较低(每个数据库都必须有一些备用空间,您将拥有的备用空间乘以数据库的数量)
    • 您无法为写入密集型任务创建专用日志磁盘,您必须将所有这些 LDF 移动到一个(或多个)SSD 存储上
    • 日志写入在频繁提交时效率会降低,因为它们分散在许多单独的日志块记录中,而不是聚合成一个(你会得到未充分使用的日志块)。请参阅什么是 LSN:日志序列号以了解我在说什么。

    尽管由于隔离,分离的数据库具有一些优势,主要优势是独立备份/恢复。

    像您这样的场景是SQL Azure 数据库的完美候选者。无需管理磁盘空间,无需提供 HA/DR,可扩展到数百/数千个 DB 等。

    • 17
  3. Kromey
    2014-03-20T16:35:42+08:002014-03-20T16:35:42+08:00

    在我之前的工作中,我们不仅为每个客户端托管一个数据库——在大多数情况下,还不止这些!在我离开时,一个 MariaDB 集群中运行着 4,500 多个数据库,另一个(具有讽刺意味的是更小的)集群中运行着近 7,000 个数据库,以及每个托管 4 个“分片”(完全独立的、独立的 Web 和数据库服务器,甚至在一个完全独立的数据中心中)单个 MySQL 服务器中的 200-500 个数据库。那家公司仍在以良好的速度增长。

    总而言之,那家公司的成功证明了这样的架构确实是可行的。(警告:与使用单独数据库的明显收益相反,所有数据都是通过三个紧密耦合的应用程序访问的,这些应用程序都使用相同的数据库用户/通行证!我怀疑如果每个客户端的性能可能会受到如此轻微的影响有一个单独的用户/通行证——但只有一点点。)

    根据我与系统管理员密切合作的经验(从技术上讲,我是公司的一名程序员,但实际上我是他们拥有的最好的 DBA,也是他们唯一知道如何设置防火墙的人!),与性能相关问题归结为并发访问、查询复杂性/时间、索引性能等——换句话说,所有常见的问题,服务器上的数据库数量没有起到明显的作用,这个结论得到了高薪专家的肯定我们定期咨询的顾问。

    最重要的是,您应该关注您的应用程序、基础架构,而不是您碰巧拥有的数据库数量。所有这些其他因素足以让您忙于解决性能问题和瓶颈。

    • 3

相关问题

  • 什么是 SQL Server“德纳利”?什么是新的?

  • MySQL VARCHAR 和 TEXT 数据类型有什么区别?

  • 存储计算值或根据要求重新计算它们更好吗?[复制]

  • 存储与计算聚合值

  • 在数据仓库中实现多对多关系有哪些方法?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve