On 14/04/16 20:46, Robert Haas wrote:
I believe
logical replication is a fundamental database technology that should
be considered just as much within the score of the core product as
physical replication, parallel query, or UPSERT.
Agreed, I believed we need this for very long time as well (pglogical is
not my first or even second logical replication project).
At present, I don't understand why we would do sharding via FDWs, i.e. an
out-of-core solution and yet replication as an in-core solution. Sharding
desires/requires a single system image, so tight coupling is sensible (for
example, defining a distribution key column on a distributed table). For
replication between disparate loosely coupled systems, tight coupling is
exactly what you do not want. So doing it that way round would give an an
out-of-core solution for something that is best done in-core and an in-core
solution for something best done out-of-core.
First, I think that replication can be either loosely-coupled or
tightly-coupled. There are interesting cases with intermittently
connected networks where you really don't want too much coupling, and
then there are cases where you are doing load-balancing across a
cluster and tight coupling is fine, even desirable. Similarly,
although I agree that a sharding solution intrinsically requires
fairly tight coupling, I think that one of the strengths of FDWs is
that they do not. I'm not very interested in seeing a sharding
solution in PostgreSQL that limits what you can do to a particular
network topology and enforces tight coupling whether you want it or
not. I'm more interested in seeing how we can build something that
*permits* a tightly-coupled system but also lets people build other
kinds of systems if they wish.
I think we need both tightly and loosely coupled and I think we should
aim to solution that will make it reasonably possible to do both, ie
without reimplementing whole thing again to get the other variant. In
pglogical I was more concerned with loosely-coupled use-cases btw.
Mainly because I've seen more of them in the wild and also they are more
interesting for me personally (partially because many of the tightly
coupled use-cases can be solved by physical replication). I don't think
there is anything there that would fundamentally prevent us building
something that can work for both scenarios though.
About doing things with SQL. I think some stuff would be better done
using SQL personally, like the nodes table, since I dislike the fact
that it's not shared catalog currently. But many other things I'd prefer
to manage using functions at least in the first iteration. I think it's
preferable to have simple function interface and make things work
correctly and then maybe try to replace it with DDL where it makes sense
because DDL just needs much more boiler plate but otherwise is mostly
mechanical. One thing that worries me with SQL is that we do have some
history of bike-shedding any SQL syntax that's not part of standard to
death halting the actual feature development for prolonged time periods
as a result.
Finally a side note about sharding - I have strong believe that sharding
needs to be tightly coupled to be effective and maintainable in production.
--
Petr Jelinek http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers