lox*_*oxs 22 postgresql partitioning high-availability
在进入“NoSQL”领域多年之后,现在我遇到了一个本质上非常“关系”的问题。今天,我看到数据存储的眼光与以前截然不同。像 Riak 这样的事情已经让我无法忍受单点故障,“停机维护”等。当然,(或者我希望),我还没有完全失去理智。这是一个个人项目,还没有(或尚未)具有极高的要求。
大多数分片解决方案都没有给我我想要的(至少是一瞥),可能是因为我的问题很“容易”解决。至少在概念层面上(忽略 RDBM 本身带来的限制)。
我有少量“共享”数据,可以自由复制。它没有硬一致性的要求。这可以存储在类似发电机的数据库中,并且可以无限扩展。但如果可能的话,我仍然希望使用单个数据库。
我有很多“每用户”数据。也就是说 - 大量用户,每个用户都拥有绝对合理大小的数据,真正适合存储在单个 PostgreSQL 节点上。我们正在谈论最多 10 万条记录。
我从不需要跨用户查询,也不需要跨用户原子性。
这听起来非常容易实现。至少当我用我的“NoSQL 眼睛”看它时。
以下是我幼稚的入门想法:
在极端情况下,我可以将整个用户序列化为 Riak 中的单个键/值。当然,持续对几兆字节数据进行反/序列化会很慢,这就是我考虑使用 PostgreSQL 的原因。许多 Riak K/Vs 是行不通的,因为我需要每个用户数据中的原子性/事务。
我可以为每个用户使用一个 SQLite 数据库,并使用 GlusterFS 之类的东西来实现冗余/可用性。如果我无法使用 PostgreSQL 找到同样好的东西,这可能是我要选择的解决方案。优点:可以很好地缩小/放大;缺点:我更喜欢 PostgreSQL 的类型和严格性而不是 SQLite
所以,我最好从 PostgreSQL 分片解决方案中要求: