当数据“自然可分区”时,跨机器分区 PostgreSQL 的现代方法是什么?

lox*_*oxs 22 postgresql partitioning high-availability

在进入“NoSQL”领域多年之后,现在我遇到了一个本质上非常“关系”的问题。今天,我看到数据存储的眼光与以前截然不同。像 Riak 这样的事情已经让我无法忍受单点故障,“停机维护”等。当然,(或者我希望),我还没有完全失去理智。这是一个个人项目,还没有(或尚未)具有极高的要求。

大多数分片解决方案都没有给我我想要的(至少是一瞥),可能是因为我的问题很“容易”解决。至少在概念层面上(忽略 RDBM 本身带来的限制)。

  1. 我有少量“共享”数据,可以自由复制。它没有硬一致性的要求。这可以存储在类似发电机的数据库中,并且可以无限扩展。但如果可能的话,我仍然希望使用单个数据库。

  2. 我有很多“每用户”数据。也就是说 - 大量用户,每个用户都拥有绝对合理大小的数据,真正适合存储在单个 PostgreSQL 节点上。我们正在谈论最多 10 万条记录。

  3. 我从不需要跨用户查询,也不需要跨用户原子性。

这听起来非常容易实现。至少当我用我的“NoSQL 眼睛”看它时。

以下是我幼稚的入门想法:

  1. 在极端情况下,我可以将整个用户序列化为 Riak 中的单个键/值。当然,持续对几兆字节数据进行反/序列化会很慢,这就是我考虑使用 PostgreSQL 的原因。许多 Riak K/Vs 是行不通的,因为我需要每个用户数据中的原子性/事务。

  2. 我可以为每个用户使用一个 SQLite 数据库,并使用 GlusterFS 之类的东西来实现冗余/可用性。如果我无法使用 PostgreSQL 找到同样好的东西,这可能是我要选择的解决方案。优点:可以很好地缩小/放大;缺点:我更喜欢 PostgreSQL 的类型和严格性而不是 SQLite

所以,我最好从 PostgreSQL 分片解决方案中要求:

  1. 自动保留每个用户数据的多个副本(在不同的机器上)。能够为每个用户/分片动态切换主节点(如果之前的主节点出现故障)。
  2. 能够通过添加/删除服务器节点动态扩大/缩小规模。大多数情况下,Riak 都能做到。
  3. 不需要我的应用程序知道要与哪些节点以及何时进行通信。

小智 5

Postgres-XL正试图在 2014 年解决这个问题。他们直接针对 PostgreSQL 上的大数据,并且他们有来自 Stado 的开发人员。


小智 4

我认为,最好的选择是pgpool-II。您最多可以有 128 个节点

  1. 可以设置复杂的分区和数据分布规则
  2. 支持“在线配置”。不扩展写入,但读取可扩展
  3. 不确定,如果可能的话,开箱即用。也许你需要使用LVS

另一个选择可能是Stado