为每个客户端使用单一数据库有哪些优点?

2024-02-16

在为多个客户端设计的以数据库为中心的应用程序中,我一直认为对所有客户端使用单个数据库“更好”——将记录与正确的索引和键相关联。在收听 Stack Overflow 播客时,我听到 Joel 提到 FogBugz 每个客户端使用一个数据库(因此,如果有 1000 个客户端,就会有 1000 个数据库)。使用这种架构有什么优点?

据我了解,对于某些项目,客户需要直接访问其所有数据 - 在这样的应用程序中,显然每个客户都需要自己的数据库。但是,对于客户端不需要直接访问数据库的项目,每个客户端使用一个数据库有什么优势吗?就灵活性而言,使用单个数据库和单个表副本似乎要简单得多。添加新功能更容易,创建报告更容易,而且管理也更容易。

我对“所有客户的一个数据库”方法非常有信心,直到我听到 Joel(一位经验丰富的开发人员)提到他的软件使用了不同的方法 - 我对他的决定有点困惑......

我听说人们引用大量记录时数据库会变慢,但是任何具有一定优点的关系数据库都不会出现这个问题 - 特别是如果使用正确的索引和键。

任何意见都将不胜感激!


假设将所有客户端存储在一个数据库中不会造成扩展损失;对于大多数人来说,以及配置良好的数据库/查询,现在这将是相当正确的。如果您不是这些人中的一员,那么单一数据库的好处是显而易见的。

在这种情况下,好处来自于每个客户端的封装。从代码的角度来看,每个客户端都是孤立存在的 - 数据库更新不可能覆盖、损坏、检索或更改属于另一个客户端的数据。这也简化了模型,因为您无需考虑记录可能属于另一个客户端的事实。

您还可以获得可分离性的好处 - 提取与给定客户端关联的数据并将它们移动到不同的服务器非常简单。或者,当调用“我们已经删除了一些关键数据!”时,使用内置数据库机制恢复该客户端的备份。

您可以获得轻松且免费的服务器移动性 - 如果您扩展一台数据库服务器,您可以在另一台服务器上托管新客户端。如果它们全部位于一个数据库中,则您需要获得更强大的硬件,或者在多台计算机上运行数据库。

您可以轻松进行版本控制 - 如果一个客户端想要保留软件版本 1.0,而另一个客户端想要 2.0,其中 1.0 和 2.0 使用不同的数据库模式,那么没有问题 - 您可以迁移一个客户端,而无需将它们从一个数据库中取出。

我想我还能想到几十个。但总而言之,关键概念是“简单”。该产品管理一个客户端,从而管理一个数据库。 “但是数据库还包含其他客户端”问题从来没有任何复杂性。它符合用户单独存在的心理模型。能够同时对所有客户进行简单报告之类的优势是微不足道的 - 您多久需要一份关于整个世界而不仅仅是一个客户的报告?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为每个客户端使用单一数据库有哪些优点? 的相关文章

  • theta 连接、等值连接和自然连接之间的区别

    当涉及到 theta 连接 等值连接和自然连接时 我无法理解关系代数 有人可以帮助我更好地理解它吗 如果我在 theta 连接上使用 符号 它与使用自然连接完全相同吗 A 西塔加入允许任意比较关系 例如 An equijoin是使用相等运算
  • 一个表可以有多个主键吗?

    我现在很困惑 也许你可以帮助我更好地理解这个问题 即一个表可以有两个主键 如果是 那么如何 如果没有 那为什么 您询问是否可以有多个主键field你当然可以 您只能有一个主键 但它可以包含唯一标识行所需的任意数量的列 创建表时使用类似这样的
  • 数据聚合和缓存:如何按时间间隔快速绘制大型时间序列数据集的图表

    我有一个巨大的时间序列数据集 我想绘制图表 时间序列可以追溯到 5 年前 从后端的角度来看 以各种分辨率 间隔 显示这些数据的常用方法是什么 本质上我想绘制这样的数据图表 https bitcoinwisdom com markets bi
  • PostgreSQL - 致命:用户“myuser”身份验证失败[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我刚刚在我的 Ubuntu Box 中安装了 PostGreSQL 我想做的第一件事就是创建一个数据库 我读了文档 http www postgres
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • 巩固 Django 南迁移

    在我的项目的初始阶段 我对模型进行了很多更改 因此我最终为我的应用程序生成了很多向南迁移 在转到我的生产服务器执行迁移之前 是否可以以任何方式整合它们 这样我就不会为每个应用程序进行一百万次迁移 如果是这样 我该怎么做呢 您始终可以删除现有
  • 具有不同组合的产品和产品包的数据库模型

    您将如何设计数据库来实现此功能 考虑一个场景 我们想要创建一个产品关系 封装 假设我们创建一个产品表 prod id prod name prod fee 1 prepaid A 19 usd 2 prepaid B 29 usd 3 pr
  • 如何使用 Wix 运行 sql 脚本创建数据库

    我在使用 Wix 创建数据库时遇到问题 我能找到的示例 参见下面的链接 都是首先使用 wix 创建数据库并运行创建表 sql 脚本 问题是我需要将 wix 设置为使用 CREATE DATABASE 运行 sql 脚本来创建数据库和表 而不
  • SQL Server 2005 是否有与 MySql 的 ENUM 数据类型等效的数据类型?

    我正在开发一个项目 我想在表中存储一些容易枚举的信息 MySql 的枚举数据类型正是我想要的 http dev mysql com doc refman 5 0 en enum html http dev mysql com doc ref
  • 如何在 phalcon 框架中同时连接多个数据库在模型类中同时使用两个而不仅仅是一个

    在我的代码中我有两个数据库ABC and XYZ 我想在同一模型中使用两个数据库 而不是 phalcon 中的解决方案是什么 如何为此实现多个数据库连接 one
  • 如何在Word 2010中从SQL数据库检索数据?

    我想用 MS SQL 数据库中的数据填充 Word 文档 这可能吗 如果可能的话 如何实现 我过去曾通过多种方式做到这一点 这取决于用户是从 Microsoft Word 外部还是从 Microsoft Word 内部启动操作 From I
  • Android中BaseColumns有什么用

    实现一个类有什么用BaseColumns在安卓中 The BaseColumns http developer android com reference android provider BaseColumns html接口提供了非常常见
  • 游标索引越界异常

    打开后出现光标索引越界错误 数据库 请任何人告诉我如何打开现有数据库 sqllite Android 我想在数据库上触发一个选择查询 检索一些信息 public void getPatient SQLiteDatabase db Strin
  • 客户端应用程序立即对数据库中的更新做出反应的最佳方式是什么?

    对数据库中的数据更新做出立即反应的最佳方法是什么 我能立即想到的最简单的方法是一个线程 它检查数据库中某些数据的特定更改 并持续等待在某个预定义的时间长度内再次检查它 这个解决方案对我来说似乎是浪费和次优的 所以我想知道是否有更好的方法 我
  • 要做或不做:将图像存储在数据库中[重复]

    这个问题在这里已经有答案了 在 Web 应用程序的上下文中 我的前老板总是说在数据库中放置对图像的引用 而不是图像本身 我倾向于同意在数据库中存储 url 与图像本身是一个好主意 但在我现在工作的地方 我们在数据库中存储大量图像 我能想到的
  • 如何更改phpmyadmin MySQL的IP地址?

    我在 xampp 中更改了 apache 的 IP 地址 但无法连接到 MySQL 我认为问题是我的 apache 不在我的数据库的同一网络上 我的 apache 位于 192 168 1 10 而我的 MySQL 位于 127 0 0 1
  • using 块会关闭数据库连接吗?

    using DbConnection conn new DbConnection do stuff with database 会不会using块调用conn Close 是的 它会 实施DbConnection Dispose calls
  • 连接所有 PostgreSQL 表并创建 Python 字典

    我需要加入allPostgreSQL 表并将它们转换为 Python 字典 数据库中有72张表 总列数大于1600 我编写了一个简单的 Python 脚本 该脚本连接多个表 但由于以下原因无法连接所有表内存错误 https gist git
  • PDO获取最后插入的ID

    我有一个查询 我想获取插入的最后一个 ID 字段ID是主键并且自动递增 我知道我必须使用这个声明 LAST INSERT ID 该语句适用于如下查询 query INSERT INTO cell place ID VALUES LAST I
  • 在python中将数据库表写入文件的最快方法

    我正在尝试从数据库中提取大量数据并将其写入 csv 文件 我正在尝试找出最快的方法来做到这一点 我发现在 fetchall 的结果上运行 writerows 比下面的代码慢 40 with open filename a as f writ

随机推荐