是使用多个数据库各有一个架构更好,还是一个数据库有多个架构更好? [关闭]

2024-05-05

After 这条评论 https://stackoverflow.com/questions/1130555/postgresql-pitr-backup-best-practices-to-handle-multiple-databases/1145332#1145332对于我的问题之一,我在想是否使用具有 X 模式的数据库更好,反之亦然。

我正在开发一个网络应用程序,当人们注册时,我(实际上)创建一个数据库(不,它不是社交网络:每个人都必须有权访问自己的数据,并且永远不会看到其他用户的数据)。这就是我在应用程序的早期版本(仍在 MySQL 上运行)中使用的方式:通过 Plesk API,对于每次注册,我都会执行以下操作:

  1. 创建一个具有有限权限的数据库用户;
  2. 创建一个只能由之前创建的用户和超级用户访问的数据库(用于维护)
  3. 填充数据库

现在,我需要对 PostgreSQL 做同样的事情(该项目正在变得成熟,而 MySQL 不能满足所有需求)。我需要使所有数据库/模式备份独立:pg_dump这两种方式都可以完美地工作,对于可以配置为仅访问一种模式或一种数据库的用户来说也是如此。

那么,假设您是比我更有经验的 PostgreSQL 用户,您认为适合我的情况的最佳解决方案是什么,为什么?使用 $x 数据库而不是 $x 模式会有性能差异吗?什么样的解决方案将来会更好地维护(可靠性)?我所有的数据库/模式都会always具有相同的结构!

对于备份问题(使用 pg_dump),使用一个数据库和多个模式可能更好,一次转储所有模式:恢复将非常简单,将主转储加载到开发计算机中,然后转储并恢复所需的模式:是一个额外的步骤,但是转储所有模式似乎比逐一转储它们更快。

2012 年更新

嗯,在过去的两年里,应用程序的结构和设计发生了很大的变化。我仍在使用“一个数据库有多个模式”的方法,但我仍然有一个数据库对于每个版本我的申请:

Db myapp_01
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema
Db myapp_02
    \_ my_customer_foo_schema
    \_ my_customer_bar_schema

对于备份,我定期转储每个数据库,然后将备份移动到开发服务器上。我也在使用 PITR/WAL 备份,但是,正如我之前所说,我不太可能需要恢复所有数据库立刻。所以今年它可能会被驳回(在我的情况下这不是最好的方法)。

从现在开始,一数据库多模式方法对我来说非常有效,即使应用程序结构完全改变了。我差点忘了:我所有的数据库/模式都会always具有相同的结构!现在,每个模式都有自己的结构,可以根据用户数据流动态变化。


PostgreSQL“架构”与 MySQL“数据库”大致相同。在 PostgreSQL 安装上安装多个数据库可能会出现问题;拥有许多模式将毫无问题。因此,您肯定希望使用一个数据库和该数据库中的多个模式。

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

是使用多个数据库各有一个架构更好,还是一个数据库有多个架构更好? [关闭] 的相关文章

  • 在python中将数据库表写入文件的最快方法

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

    我有一个将数据保存到名为 作业 的表中的应用程序 Jobs 表有一个名为 Name 的列 该列具有 UNIQUE 约束 名称列不是主键 我想知道在尝试保存 更新新条目之前是否应该自己检查重复条目 或者最好等待数据访问层抛出异常 如果这个应用
  • sql直接获取表行数的方法

    stackoverflow 的朋友们大家好 我的例行程序中有一个我认为不必要的步骤 假设您想从图库中获取所有图像 并限制每页一定数量的图像 db PDO object start pagenum x images per page limi
  • postgresql ON CONFLICT 具有多个约束

    有一个约束违规处理 冲突时 语句 如果我想检查 1 个 约束 则工作正常 例如 INSERT INTO my table co1 col2 colN VALUES ON CONFLICT col1 col2 DO NOTHING or up
  • 使用实体框架、代码优先方法解决结构问题

    我目前正在使用 EF 和代码优先方法从现有系统构建数据库 最好对 核心 类进行最小的更改 因此 我想找到 Structs 和 EF 的解决方法 是否可以以任何方式将 Struct 包装到类中 以便 EF 可以使用此 Struct 中的数据
  • 如何处理多个连接

    我有一个复杂的查询 需要总共 4 个表中的字段 内部联接导致查询花费的时间比应有的时间长得多 我已经运行了一个 EXPLAIN 语句 其可视化结果附在下面 这是我的查询 SELECT pending corrections correcte
  • Postgres 多重连接

    这是一个 postgres 数据库 我试图从品种表中提取狗的品种名称 卡斯罗 拉布拉多等 以根据动物表中的外键进行显示 我的问题是动物表有两个外键指向这个单一品种表 并且我的查询不断出错 第一个品种名称将根据左连接返回 但第二个品种名称无法
  • 在静态类中存储连接 (ASP.NET)

    由于我使用的是 Postgresql 并且无法使用 LINQ to SQL 因此我编写了自己的包装器类 这是学生课程的一部分 public class Student User private static NpgsqlConnection
  • Dapper 在执行时挂起

    我有一个 IDb连接 sql UPDATE 表名 SET json json lastupdate SYSDATE WHERE id id var param new DynamicParameters param Add json jso
  • PostgreSQL 索引创建时间

    我可以使用什么查询来找出数据库中创建特定索引 唯一或非唯一 的时间 日期 基本上我想找出过去一个月左右创建的索引 这不可能 没有关于创建关系 索引等的时间的信息
  • 使用 unnest() 返回行?

    我尝试在完成后返回一组行UPDATE 像这样的东西 UPDATE Notis new noti SET notis noti record type FROM SELECT FROM Notis WHERE user id 2 FOR UP
  • 将 python 列表存储到数据库的最佳方法?

    将 python 数字列表 例如 4 7 10 39 91 存储到数据库的最佳方法是什么 我使用 Pyramid 框架和 SQLAlchemy 与数据库进行通信 Thanks 您可以使用json http docs python org l
  • 如何获取 PostgreSQL 游标的行数?

    我有一个使用创建的光标WITH HOLD允许游标用于后续事务的选项 我想检索游标可以获取的行数 由于保留游标表示的行被复制到临时文件或内存区域中 我想知道是否可以以直接的方式检索该数字 或者唯一的解决方案是获取所有记录来对它们进行计数 在这
  • 如何使 cx-oracle 将查询结果绑定到字典而不是元组?

    这是我的代码 我想找到一种方法将查询结果作为字典列表而不是元组列表返回 看起来 cx oracle 通过部分文档讨论 绑定 来支持这一点 虽然我不知道它是如何工作的 def connect dsn cx Oracle makedsn hos
  • 分配给 SQLite 内存数据库的内存大小

    如果使用下面的语法创建一个内存中的sqlite数据库 那么分配给它的最大内存大小是多少 my dbh DBI gt connect dbi SQLite dbname memory 如果内存数据库的大小大于最大可用内存 将会发生什么情况 假
  • plpgsql 中的伪加密() 函数采用 bigint

    我正在开发一个生成随机 ID 的系统 如答案 2 所示here https stackoverflow com questions 12575022 generating an instagram or youtube like ungue
  • 将表列添加到 Group by 子句 - Ruby on Rails - Postgresql

    我正在尝试使用 Heroku 显然 Postgresql 对于聚合函数来说比 SQL 严格得多 当我推送到 Heroku 时 我收到一条错误消息 内容如下 关于另一个问题 https stackoverflow com questions
  • PostgreSQL ISOLATION LEVEL 生效的时间似乎是在第一次 SELECT 之后

    我正在运行 PostgreSQL 9 5 3 我试图理解为什么我看到下面两个例程之间的行为差 异 我发现这种行为违反直觉 但可能有一个很好的理由 我只是想知道如果是的话那是什么 Setting ISOLATION LEVEL REPEATA
  • 如何使用准备好的语句在 postgresql 中插入带有时区的时间戳?

    我正在尝试使用准备好的语句将一个字符串插入到数据库的带有时区字段的时间戳中 其中包括日期 时间和时区 问题是 Timestamp valueof 函数没有考虑字符串包含的时区 因此会导致错误 接受的格式是 yyyy m m d d hh m
  • 如何获取sql server 2005中数据库连接的详细列表?

    如何获取sql server 2005中数据库连接的详细列表 使用系统存储过程sp who2

随机推荐