Wed Sep 5 14:35:28 PDT 2007
- Previous message: [Slony1-commit] slony1-engine/src/slon remote_worker.c
- Next message: [Slony1-commit] slony1-engine/doc/adminguide filelist.sgml partitioning.sgml slony.sgml
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Update of /home/cvsd/slony1/slony1-engine/doc/adminguide In directory main.slony.info:/tmp/cvs-serv30703 Modified Files: slony.sgml filelist.sgml Added Files: partitioning.sgml Log Message: Add partitioning documentation to admin guide Index: filelist.sgml =================================================================== RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/filelist.sgml,v retrieving revision 1.19 retrieving revision 1.20 diff -C2 -d -r1.19 -r1.20 *** filelist.sgml 22 Aug 2007 22:06:47 -0000 1.19 --- filelist.sgml 5 Sep 2007 21:35:25 -0000 1.20 *************** *** 46,49 **** --- 46,50 ---- <!entity releasechecklist SYSTEM "releasechecklist.sgml"> <!entity raceconditions SYSTEM "raceconditions.sgml"> + <!entity partitioning SYSTEM "partitioning.sgml"> <!-- back matter --> Index: slony.sgml =================================================================== RCS file: /home/cvsd/slony1/slony1-engine/doc/adminguide/slony.sgml,v retrieving revision 1.37 retrieving revision 1.38 diff -C2 -d -r1.37 -r1.38 *** slony.sgml 22 Aug 2007 22:06:48 -0000 1.37 --- slony.sgml 5 Sep 2007 21:35:25 -0000 1.38 *************** *** 102,105 **** --- 102,106 ---- &usingslonik; &adminscripts; + &partitioning; &slonyupgrade; &versionupgrade; --- NEW FILE: partitioning.sgml --- <!-- $Id: partitioning.sgml,v 1.1 2007-09-05 21:35:25 cbbrowne Exp $ --> <sect1 id="partitioning"> <title>Partitioning Support </title> <indexterm><primary>partitioning</primary></indexterm> <para> &slony1; does not directly provide support for the &postgres; methodology of partitioning via inheritance, but it does not, by the same token, prevent the Gentle User from using that sort of replication scheme, and then replicating the underlying tables. </para> <para> One of the tests in the <xref linkend="testbed">, called <filename>testinherit</filename>, tests that &slony1; behaves as expected to replicate data across partitions. This test creates a master <envar>sales_data</envar> table, from which various children inherit: </para> <itemizedlist> <listitem><para> <envar>us_east</envar></para> </listitem> <listitem><para> <envar>us_west</envar></para> </listitem> <listitem><para> <envar>canada</envar></para> </listitem> </itemizedlist> <para> The example is somewhat simplistic as it only provides rules to handle initial insertion into the respective partitions; it does not then support allowing tuples to migrate from partition to partition if they are altered via an <COMMAND>UPDATE</COMMAND> statement. On the other hand, unlike with many partitioning cases, this one permits the <quote>parent</quote> table to contain tuples. </para> <para> Things worth observing include:</para> <itemizedlist> <listitem><para> Each partition table must be added to replication individually. </para> </listitem> <listitem><para> &slony1; is not aware of the relationship between partitions; it simply regards them as a series of individual tables. </para> </listitem> </itemizedlist> <sect2><title> Support for Dynamic Partition Addition</title> <para> One common <quote>use case</quote> of replication is to partition large data sets based on time period, whether weekly, monthly, quarterly, or annually, where there is therefore a need to periodically add a new partition. </para> <para> The traditional approach taken to this in &slony1; would be the following: </para> <itemizedlist> <listitem><para> <xref linkend="stmtddlscript"> to add the new partition(s) on each node </para> </listitem> <listitem><para> <xref linkend="stmtcreateset"> to create a temporary replication set </para> </listitem> <listitem><para> <xref linkend="stmtsetaddtable"> to add the table(s) to that set </para> </listitem> <listitem><para> <xref linkend="stmtsubscribeset">, once for each subscriber node, to set up replication of the table on each node </para> </listitem> <listitem><para> <xref linkend="stmtmergeset">, once subscriptions are running, to eliminate the temporary set </para> </listitem> </itemizedlist> <para> In view of the fact that we can be certain that a thus-far-unused partition will be empty, we offer an alternative mechanism which evades the need to create extra replication sets and the need to submit multiple <xref linkend="stmtsubscribeset"> requests. The alternative is as follows; we use <xref linkend="stmtddlscript">, extending the DDL script thus: </para> <itemizedlist> <listitem><para> Add the new partition(s) on each node </para> </listitem> <listitem><para> Run a &slony1; stored function to mark the new partition as being a replicated table </para> <para> On the origin node, if the table is found to have tuples in it, the DDL script will be aborted, as the precondition that it be empty has been violated. </para> <para> On subscriber nodes, we may safely <command>TRUNCATE</command> the new table. </para> </listitem> </itemizedlist> <para> There are several stored functions provided to support this; the Gentle User may use whichever seems preferable. The <quote>base function</quote> is <function>add_empty_table_to_replication()</function>; the others provide additional structure and validation of the arguments </para> <itemizedlist> <listitem><para> <function> add_empty_table_to_replication (set_id, tab_id, nspname, tabname, idxname, comment);</function> </para> <para> This is the <quote>base</quote> function; you must specify the set ID, table ID, namespace name, table name, index name, and a comment, and this table will be added to replication. </para> <para> Note that the index name is optional; if NULL, the function will look up the primary key for the table, assuming one exists, and fail if it does not exist. </para> </listitem> <listitem><para> <function> replicate_partition(tab_id, nspname, tabname, idxname, comment); </function> </para> <para> If it is known that the table to be replicated inherits from a replicated parent table, then this function can draw set and origin information from that parent table. </para> </listitem> </itemizedlist> <note><para> As has been observed previously, &slony1; is unaware that tables are partitioned. Therefore, this approach may also be used with confidence to add any table to replication that is known to be empty. </para> </note> </sect1> <!-- Keep this comment at the end of the file Local variables: mode:sgml sgml-omittag:nil sgml-shorttag:t sgml-minimize-attributes:nil sgml-always-quote-attributes:t sgml-indent-step:1 sgml-indent-data:t sgml-parent-document:"slony.sgml" sgml-exposed-tags:nil sgml-local-catalogs:("/usr/lib/sgml/catalog") sgml-local-ecat-files:nil End: -->
- Previous message: [Slony1-commit] slony1-engine/src/slon remote_worker.c
- Next message: [Slony1-commit] slony1-engine/doc/adminguide filelist.sgml partitioning.sgml slony.sgml
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Slony1-commit mailing list