Postgresql 可以在写保护的文件系统上运行Postgres吗?还是共享文件系统?
我正在尝试建立一个分布式处理环境, 所有数据都位于一个共享网络驱动器中。 我不会写任何东西,只是从中阅读, 因此,我们也在考虑写保护网络驱动器 我记得当我使用MSSQL时, 我可以将数据库备份到DVD,并将其作为只读数据库直接加载 如果我能在博士后做这样的事, 我应该可以把它抽象成只读DVD, 一切都会好的Postgresql 可以在写保护的文件系统上运行Postgres吗?还是共享文件系统?,postgresql,parallel-processing,distributed-computing,Postgresql,Parallel Processing,Distributed Computing,我正在尝试建立一个分布式处理环境, 所有数据都位于一个共享网络驱动器中。 我不会写任何东西,只是从中阅读, 因此,我们也在考虑写保护网络驱动器 我记得当我使用MSSQL时, 我可以将数据库备份到DVD,并将其作为只读数据库直接加载 如果我能在博士后做这样的事, 我应该可以把它抽象成只读DVD, 一切都会好的 这样的事情在研究生中可能发生吗, 若否,有何选择??(MySQL?甚至sqlite?) 或者,如果不可能,是否有某种方法来指定共享文件系统? (让它知道其他进程也在从中读取?) 由于各种原因
这样的事情在研究生中可能发生吗, 若否,有何选择??(MySQL?甚至sqlite?) 或者,如果不可能,是否有某种方法来指定共享文件系统? (让它知道其他进程也在从中读取?) 由于各种原因,使用并行dbms是不可能的, 我需要两个并行运行的DB进程 非常感谢您的帮助。
谢谢 我从未尝试过,但如果您的所有使用都是只读的,那么可以使用data dir运行postgres,而data dir主要位于RO文件系统上。您需要确保禁用自动真空。我认为,即使是读取活动也可能会产生xlog变异,因此您可能必须将
pg_xlog
目录符号链接到一个可写文件系统上。有时读取查询会溢出到磁盘以满足大排序或其他临时要求,因此您还应该将base/pgsql\u tmp
链接到可写磁盘区域
正如Richard指出的那样,数据堆中存在可见性提示位。在将数据库放入RO文件系统之前,可能需要在数据库上进行尝试。写保护数据目录将导致PostgreSQL无法启动,因为它需要能够写入
postmaster.pid
。PostgreSQL还需要能够编写临时文件和表空间、设置提示位、管理可见性映射等
从理论上讲,修改PostgreSQL server以支持在只读数据库上运行是可能的,但目前看来这是不受支持的。别指望它能奏效。您需要克隆每个实例的数据目录
如果出于性能原因希望运行多个PostgreSQL实例,那么让它们为共享存储而争斗将适得其反。如果DB足够小,可以放入RAM中,那就可以了。。。但在这种情况下,只需将其克隆到每台机器上也很容易。如果数据库不够大,无法缓存在RAM中,那么这两个数据库实例都会受到I/O瓶颈的限制,不可能比不受存储争用影响的单个数据库的性能更好(可能略差)
您有可能通过以下方式使其发挥作用:
- 将常量数据移动到新表空间到只读共享存储上
- 对数据库进行basebackup,减去新分离的共享数据表空间
- 将数据库的basebackup复制到将运行数据库的每个主机上的读/写专用存储
- 装载共享存储并将表空间链接到Pg期望的位置
- 起始pg
。。。至少如果您首先强制设置提示位和真空冻结共享表空间中的所有内容。它不受支持,未经测试,可能无法工作,运行私有实例没有任何好处,我肯定不会这么做,但如果你真的坚持,你可以试试。崩溃、错误的查询结果和其他奇怪的行为是不可能发生的。“在Postgres中,这样的事情可能发生吗?如果没有,还有其他选择吗?(MySQL?甚至sqlite?) 我试图弄清楚我是否也可以用postgres实现这一点,从sqlite通过系统进行移植。我可以确认,对于只读NFS共享上的sqlite3数据库文件,这一切都很好。Sqlite确实可以很好地实现这一目的
完成sqlite后,只要有更新,我们就会切换到一个包含新sqlite文件的新目录。我们永远不会插入到正在使用的数据库中。我不确定插入是否会造成任何问题(对于任何一个数据库)。如果另一个数据库实例装载了dir读写操作,则在操作系统级别缓存只读数据可能是一个问题。这是我理想中希望能够做到的。如果没有一些调整,将无法工作。除了排序等,数据表中还有“提示位”指示事务可见性。如果所有的数据在进行pnly读取之前都被标记为“冻结”,那么您可能可以这样做。为什么您不只是以“只读”用户的身份访问数据库?另外,如果并行性很重要,您是否研究过hadoop和其他分布式系统?“出于各种原因”?如果你解释得更多(在dba.stackexchange.com上,问这类问题的合适地方),我们可能会提供更多帮助。“运行私有实例没有好处”,好吧,一个好处是在真正海量的数据集中节省存储空间。@Brian在不寻常的以读为主的情况下,CPU限制的工作负载,其中存储系统不是瓶颈,是的。在大多数其他情况下,这只会让你得到两台共享相同存储iops的机器,再加上额外的开销。。。“以读为主、CPU受限的工作负载,其中存储系统不是瓶颈”正是我所拥有的;-)如果你想让PostgreSQL能够做到这一点,你需要在服务器核心代码上做一些重要的工作,制作一个高质量的补丁,并让黑客团队相信这是一个值得在未来支持的功能。或者保持一个叉子。如果您想解决这个问题,您可以从热备份代码开始,并添加选项(a)从datadir外部读取
recovery.conf
,以及(b)允许邮政局长在datadir外部创建postmaster.pid
;可能更多。即使如此,如果有人更改了它下面的datadir内容,邮政局长也可以自由地可怕地崩溃。我看不出有什么办法。个人