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


22

在进入“ NoSQL”领域几年后,现在我遇到了一个本质上非常“关系”的问题。今天,我看到的数据存储区与以往完全不同。诸如Riak之类的事情以一种无法忍受的单点故障,“需要维护的停机”之类的方式宠坏了我。当然,(或者我希望),我还没有完全失去理智。这是一个个人项目,尚未(或尚未)有很高的要求。

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

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

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

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

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

这是我幼稚的入门想法:

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

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

因此,理想情况下,我将从PostgreSQL分片解决方案中请求什么:

  1. 自动在每个用户的数据(在不同的计算机上)周围保留几个副本。能够按用户/分片动态切换主节点(如果先前的主节点出现故障)。
  2. 通过添加/删除服务器节点,可以动态放大/缩小规模。通常就像Riak一样能够做到。
  3. 不需要我的应用程序知道与哪些节点以及何时与之对话。

您好lox,您最终是如何解决此问题的?
迪克拉2014年

具有多个数据存储的应用程序级别分区。实际上是一团糟:(。非常可悲的是,这样的事情不存在...
loxs

Answers:



4

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

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

另一种选择可能是Stado

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.