2
当数据“自然可分区”时,跨机器对PostgreSQL进行分区的现代方法是什么?
此问题是从Stack Overflow 迁移而来的,因为可以在Database Administrators Stack Exchange上回答。 迁移 7年前。 在进入“ NoSQL”领域几年后,现在我遇到了一个本质上非常“关系”的问题。今天,我看到的数据存储区与以往完全不同。诸如Riak之类的事情以一种无法忍受的单点故障,“需要维护的停机”之类的方式宠坏了我。当然,(或者我希望),我还没有完全失去理智。这是一个个人项目,尚未(或尚未)有很高的要求。 大多数分片解决方案都没有给我我想要的东西(至少乍一看),可能是因为我的问题很“容易”解决。至少在概念层面(忽略RDBM本身带来的限制)。 我有少量的“共享”数据,可以自由复制。它没有硬一致性的要求。可以将其存储在类似发电机的数据库中,并且可以无限扩展。但是,如果可能的话,我仍然想使用一个数据库。 我有很多“每用户”数据。那就是-很多用户,每个用户拥有绝对合理大小的数据,确实适合存储在单个PostgreSQL节点上。我们正在谈论的最多是数千条记录。 我永远不需要查询跨用户,也不需要跨用户原子性。 这听起来非常容易实现。至少当我用“ NoSQL眼睛”看时。 这是我幼稚的入门想法: 在极端情况下,我可以将整个用户序列化为Riak中的单个键/值。当然,对数兆字节的数据进行持续的反序列化会很慢,这就是我考虑使用PostgreSQL的原因。很多Riak K / V都是不行的,因为我需要每个用户数据内的原子性/事务性。 我可以为每个用户使用一个SQLite数据库,并使用GlusterFS之类的文件来实现冗余/可用性。如果我无法使用PostgreSQL找到同样好的东西,这可能就是我要选择的解决方案。优点:可以很好地缩小/放大比例;缺点:我比SQLite更喜欢PostgreSQL的类型和严格性 因此,理想情况下,我将从PostgreSQL分片解决方案中请求什么: 自动在每个用户的数据(在不同的计算机上)周围保留几个副本。能够按用户/分片动态切换主节点(如果先前的主节点出现故障)。 通过添加/删除服务器节点,可以动态放大/缩小规模。通常就像Riak一样能够做到。 不需要我的应用程序知道与哪些节点以及何时与之对话。