SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
Bucardo:
                            Replication with
                            tiny little goats
                                             Selena Deckelmann
                                            selena@endpoint.com
en
 dp
  oi
     nt
        .c
       om




http://www.flickr.com/photos/kevincollins/
Hi!

             ★   Software Engineer / Postgres Lead
                 http://endpoint.com
             ★   We’re hiring! http://tr.im/EMGj
en
dp
 oi
     nt
        .c
       om
en
dp




       http://www.telegraph.co.uk/science/science-news/4409958/Extinct-ibex-is-
 oi
     nt
        .c




                             resurrected-by-cloning.html
       om
What can it do?
en
dp
 oi
     nt
        .c




     http://www.flickr.com/photos/8602783@N06/2294028540
       om
Master-slave

             • Scaling/Redundancy
             • UPGRADES (8.x -> 8.4)
             • Reporting databases
             • Data warehousing
             • Now handles SEQUENCES!
en
dp
 oi
     nt
        .c
       om
Master-master

             • Write between both databases!
             • Sync type: SWAP
             • Conflict resolution
en
dp
 oi
     nt
        .c
       om
Custom code

             • Respond to change
             • Filter
             • Run arbitrary code!
en
dp
 oi
     nt
        .c
       om
STORY TIME!
                                       item
                                         ski
                                        item
                                          ski
                                          item
                                            ski
                                           item
                                             item
                                             ski
                                               item
                                               ski
             item     onhand
                                                 ski
                                                 item
               skis      10
                                                   ski
                                                   item
                                                     ski
                                                     item
                                                       ski
                                                       item
                                                         ski
               on hand = count(item)
en
dp
 oi
     nt
        .c
       om
prod db
                                                                               reporting db
     new!
             item         NOTIFY bucardo
              ski
                                                         sync B                new!
                                                                                         item
                                                            syn                            ski
                                                                  cC
                                                                                      on hand
                              cA


                                        Y
                                      TIF                                                  +1
                           syn

                                    NO

             custom
              code


                       count(items)
                      and other stuff
en
dp
 oi
     nt
        .c
       om




                                            goat courtesy of: http://www.flickr.com/photos/nuritwilde/394603312
Strengths

             • Drop-in, no changes to Postgres
             • Control daemon/DB can run anywhere
             • EXTREME async
             • No locking of slaves
             • Command-line controls rock!
en
dp
 oi
     nt
        .c
       om
The Fine Print
             • No smooth DDL handling
             • Not for failover (aka high availability)
             • bloat: pg_listener, q, bucardo_delta,
               bucardo_track
             • No locking of slaves
             • No Windows support
             • One developer
en
dp
 oi
     nt
        .c
       om




                                             http://www.flickr.com/photos/ncarey/135901120/
en
dp
 oi
     nt
        .c




     http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling
       om
Bucardo
 Concepts
en
dp
 oi
     nt
        .c
       om




             http://www.flickr.com/photos/kendrick/361173694
Glossary of terms
             • replication: copying data from one place to
               another
             • DDL: Data Definition Language (CREATE/
               DROP/ALTER)
             • DML: Data Manipulation Language (SELECT/
               INSERT/UPDATE/DELETE)
             • triggers: bits of code run before or after DML
en
dp
 oi
     nt
        .c
       om
Glossary of terms

             • goat: a database object (table or sequence)
             • herd: table contains unique name for a group of
               goats
             • syncs: replication events (one herd per sync)
en
dp
 oi
     nt
        .c
       om
flexible architecture
                         bucardo control
                            database




             master DB                     slave DB
en
dp
 oi
     nt
        .c
       om
flexible architecture
             same db
                              bucardo control
              cluster            database




                  master DB                     slave DB
en
dp
 oi
     nt
        .c
       om
flexible architecture
             same db cluster
                 bucardo control
                    database




                   master DB       slave DB
en
dp
 oi
     nt
        .c
       om
flexible architecture
                         same db cluster
                             bucardo control
                                database




             master DB          slave DB
en
dp
 oi
     nt
        .c
       om
Installing
en
dp
 oi
     nt
        .c
       om




                  http://www.flickr.com/photos/kendrick/361173694
Bucardo Requirements
             • Postgres (8.3 or higher recommended)
             • Perl & some packages:
              •   DBD::Pg 2.0

              •   DBI 1.51

              •   DBIx::Safe 1.2.4

              •   ExtUtils::MakeMaker 6.32

             • pl/perlu and pl/pgsql
en
dp
 oi
     nt
        .c
       om
Simple set up


             BUCARDO CONTROL database setup:
             bucardo_ctl install
en
dp
 oi
     nt
        .c
       om
Simple set up

             MASTER setup:
             bucardo_ctl add db MyDB name=master
             bucardo_ctl add all tables herd=all_tables
             bucardo_ctl add all sequences herd=all_tables

             SLAVE setup:
             bucardo_ctl add db MyDB name=slave port=6543
en
dp
 oi
     nt
        .c
       om
Setting up, cont.
             TEST:
             bucardo_ctl validate all

             REPLICATE:
             bucardo_ctl add sync delta
              type=pushdelta source=all_tables
              targetdb=slave
             bucardo_ctl start

             (installs triggers!)
en
dp
 oi
     nt
        .c
       om
Setting up

             • Initiate a one-time-copy: onetimecopy=[1|2]
             • Set up ongoing syncs: enabled by default
               (can set timeouts)
             • MANY configuration options
en
dp
 oi
     nt
        .c
       om
Admin stuff

             • Can set up defaults in .bucardorc
             • Only need one ‘bucardo’ database
             • Uses the ‘bucardo’ schema in replication
               sets for ease of admin, removal
en
dp
 oi
     nt
        .c
       om
Smooth upgrades!

             bucardo_ctl upgrade
             • Stop bucardo first (bucardo_ctl   stop)

             • applies DDL changes, functions
             • see also UPGRADE file
en
dp
 oi
     nt
        .c
       om
Stuff to watch out for

             • search_path for ‘bucardo’ user
             • PL/Perlu & pl/pgsql must be installed
             • Uses prepared statements, turn off with:
               bucardo_ctl update db MyDB
               server_side_prepares=0
en
dp
 oi
     nt
        .c
       om
LIVE DEMO!


             • http://github.com/selenamarie/
               bucardo_examples
en
dp
 oi
     nt
        .c
       om
Internals
en
dp
 oi
     nt




                  http://www.flickr.com/photos/chelseagirlphotos
        .c
       om
Internals
             bucardo=# d
                                    List of relations
              Schema |               Name             |   Type   | Owner
             ---------+-------------------------------+----------+---------
              bucardo | audit_pid                     | table    | bucardo
              bucardo | audit_pid_id_seq              | sequence | bucardo
              bucardo | bucardo_config                | table    | bucardo
              bucardo | bucardo_custom_trigger        | table    | bucardo
              bucardo | bucardo_custom_trigger_id_seq | sequence | bucardo
              bucardo | bucardo_log_message           | table    | bucardo
              bucardo | bucardo_rate                  | table    | bucardo
              bucardo | customcode                    | table    | bucardo
              bucardo | customcode_id_seq             | sequence | bucardo
              bucardo | customcode_map                | table    | bucardo
              bucardo | db                            | table    | bucardo
              bucardo | db_connlog                    | table    | bucardo
              bucardo | dbgroup                       | table    | bucardo
              bucardo | dbmap                         | table    | bucardo
              bucardo | goat                          | table    | bucardo
              bucardo | goat_id_seq                   | sequence | bucardo
              bucardo | herd                          | table    | bucardo
              bucardo | herdmap                       | table    | bucardo
              bucardo | q                             | table    | bucardo
              bucardo | sync                          | table    | bucardo
              bucardo | upgrade_log                   | table    | bucardo
en




             (21 rows)
dp
 oi
     nt
        .c
       om
goats
         Table "bucardo.goat"
                  Column       |           Type           |
         ----------------------+--------------------------+
          id                   | integer                  |
          db                   | text                     |
          schemaname           | text                     |
          tablename            | text                     |
          reltype              | text                     |
          pkey                 | text                     |
          qpkey                | text                     |
          pkeytype             | text                     |
          has_delta            | boolean                  |
          ping                 | boolean                  |
          ...
en
dp
 oi
     nt
        .c
       om
goats

 # bucardo_ctl list tables
 Table: archive.course_logging        DB:   odw_master   PK:   none
 Table: archive.messages              DB:   odw_master   PK:   none
 Table: archive.student_assignments   DB:   odw_master   PK:   none
 Table: archive.student_courses       DB:   odw_master   PK:   none
 Table: logging.activity              DB:   odw_master   PK:   activity_name (varchar)
 Table: logging.course_logging        DB:   odw_master   PK:   course_logging_id (int4)
 Table: public.ecash_transaction      DB:   odw_master   PK:   trans_id (int4)
 Table: public.feedback               DB:   odw_master   PK:   date (timestamp)
 Table: public.holidays               DB:   odw_master   PK:   customernum|month|day|
 year (int4|int4|int4|int4)
 ...
en
dp
 oi
     nt
        .c
       om
bucardo_ctl list sequences
Sequence     63:   logging.logging_seq
Sequence     64:   public.trans_id_seq
Sequence     65:   public.num_seq
Sequence     66:   public.upload_seq
en
dp
 oi
     nt
        .c
       om
bucardo database
             bucardo=# d
                                    List of relations
              Schema |               Name             |   Type   | Owner
             ---------+-------------------------------+----------+---------
             ...
              bucardo | db                            | table    | bucardo
              bucardo | db_connlog                    | table    | bucardo
              bucardo | dbgroup                       | table    | bucardo
              bucardo | dbmap                         | table    | bucardo
              bucardo | goat                          | table    | bucardo
              bucardo | goat_id_seq                   | sequence | bucardo
              bucardo | herd                          | table    | bucardo
              bucardo | herdmap                       | table    | bucardo
              bucardo | q                             | table    | bucardo
              bucardo | sync                          | table    | bucardo
              bucardo | upgrade_log                   | table    | bucardo
             (21 rows)
en
dp
 oi
     nt
        .c
       om
Status

      # bucardo_ctl status
      Days back: 3 User: bucardo Database: bucardo Port: 8000
        PID of Bucardo MCP: 6876
      Name     Type State PID Last_good Time I/U/D Last_bad Time
      ========+=====+=====+====+=========+=====+=====+========+====
      a_delta | P   |idle |6886|1m4s     |0s   |0/0/0|unknown |
      b_delta | P   |idle |6885|1m4s     |0s   |0/0/0|9h32m47s|0s
      c_delta | P   |idle |6887|1m4s     |0s   |0/0/0|unknown |
      d_delta | P   |idle |6888|54s      |0s   |0/0/0|2m6s    |3s
      e_delta | P   |idle |6890|1m4s     |0s   |0/0/0|9h32m47s|0s
      f_delta | P   |idle |6889|1m4s     |0s   |0/0/0|9h32m47s|0s
en
dp
 oi
     nt
        .c
       om
# bucardo_ctl status a_delta
             Days back: 3 User: bucardo Database: bucardo Port: 8000
             ======================================================================
             Sync name:            a_delta
             Current state:        idle (PID = 6888)
             Type:                 pushdelta
             Source herd/database: all_a / a_master
             Target database:      a_slave
             Tables in sync:       26
             Last good:            3m 34s (time to run: 0s)
             Last good time:       Oct 16, 2009 17:52:20 Target: a_slave
             Ins/Upd/Del:          20 / 0 / 50
             Last bad:             4m 47s (time to run: 3s)
             Last bad time:        Oct 16, 2009 17:51:08 Target: a_slave
             Latest bad reason: ?
             PID file:             /var/run/bucardo/bucardo.ctl.sync.a_delta.pid
             PID file created:     Fri Oct 16 17:52:09 2009
             Status:               active
             Limitdbs:             0
             Priority:             0
             Checktime:            none
             Overdue time:         00:00:00
             Expired time:         00:00:00
             Stayalive:            yes       Kidsalive: yes
             Rebuild index:        0         Do_listen: yes
             Ping:                 yes       Makedelta: no
en
dp




             Onetimecopy:          0
 oi
     nt
        .c
       om
How Bucardo replicates
en
dp
 oi
     nt
        .c
       om
Triggers
 INSERT, UPDATE, DELETE


                          bucardo_add_delta
                                 IN
                                   SE
                                      RT


                                           bucardo_delta


                          bucardo_triggerkick_[sync]



                                                 NOTIFY!
en
dp
 oi
     nt
        .c    om
NOTIFY / LISTEN
             • Simple interprocess communication
               psql# LISTEN scotch;
               psql# NOTIFY scotch;
               Asynchronous notification "scotch"
               received from server process with PID
               1337.
             • Any Postgres process can listen in
en
dp
 oi
     nt
        .c
       om
Actual Triggers!
              Table "public.test"
  Column |          Type          | Modifiers
 --------+-----------------------+-----------
  test    | character varying(15) | not null
 Indexes:
     "test_pkey" PRIMARY KEY, btree ("test")
 Triggers:
     bucardo_add_delta AFTER INSERT OR DELETE OR
 UPDATE ON test FOR EACH ROW EXECUTE PROCEDURE
 bucardo_add_delta_role()
     bucardo_triggerkick_a_delta AFTER INSERT OR
 DELETE OR UPDATE ON test FOR EACH STATEMENT
 EXECUTE PROCEDURE bucardo_triggerkick_a_delta()
en
dp
 oi
     nt
        .c
       om
Bucardo

                             NOTIFY         NOTIFY
             NOTIFY    MCP            CTL              KID
TRIGGER


                      INSERT INTO “q”

                                  SELECT from “q”
                                    UPDATE “q”


             Flow of control                         REPLICATION
en




                                                        EVENT!
dp
 oi
     nt
        .c
       om
How Syncs happen

             • NOTIFY vs. timeout vs. kick
              • NOTIFY - from master db to MCP
              • timeout - controller detects
              • kick - manual/from MCP to controller
en
dp
 oi
     nt
        .c
       om
Processes!
             • MCP, CTL, KID
              • MCP: master control process
              • CTL: controller (track, kick off/kill KIDs)
              • KID: sync processes
en
dp
 oi
     nt
        .c
       om
Administrativa

             • Totally ok to kill KIDs
             • CTL cleans up after you
             • May need to kill open database handles (for
               unfinished COPYs, etc)
en
dp
 oi
     nt
        .c
       om
Other interesting tables

              On your master DB:
              • bucardo_delta table has: ID, txn_time
              • bucardo_track table: who’s done what?
en
dp
 oi
     nt
        .c
       om
Sync types

             • Fullcopy. Timeout/kick. TRUNCATE or
               DELETE, then COPY
             • Pushdelta. Trigger. One way master-slave.
             • Swap. Trigger. Two-way. Conflict resolution.
en
dp
 oi
     nt
        .c
       om
Note about triggers:
             • canonical way to disable triggers:
               ALTER TABLE DISABLE TRIGGER ALL;
               :(
             • pre 8.3 way: UPDATE pg_class..
             • SET session_replication_role = ‘replica’;
              • Applies to just the current session
              • Thanks, Jan!
en
dp
 oi
     nt
        .c
       om
Dealing with failure

             • Troubleshooting
             • Backing up Bucardo itself
             • What happens when you lose the
               Bucardodb?
en
dp
 oi
     nt
        .c
       om
Bucardo hooks

             • LIVE DATA CHANGES!
             • pass in a hashref (ROW or ROWINFO)
             • Returned value - bitmapped (a/b or both!)
             • Affect the replication event, side effects
             • Example: cache invalidation
en
dp
 oi
     nt
        .c
       om
Bucardo Hooks

             • customcode & customcode_map
              • Conflict handlers (SWAP syncs)
              • Pure Perl
              • Exception - fix and try again
              • Pre and post trigger
en
dp
 oi
     nt
        .c
       om
Development

             • bucardo.org
             • mailing lists: http://bucardo.org/wiki/
               Bucardo_mailing_list
             • Release early, often.
             • Please submit patches! bug reports! tests!
en
dp
 oi
     nt
        .c
       om
Questions?
                          .com
                       nt
                  oi
               dp
             en
Thanks!

             http://www.slideshare.net/selenamarie/bucardo
             selena@endpoint.com
             @selenamarie on Twitter
             rss: http://www.chesnok.com/daily
en
dp
 oi
     nt
        .c
       om

Contenu connexe

Tendances

Db2 Warehouse ご紹介資料 20170922
Db2 Warehouse ご紹介資料 20170922Db2 Warehouse ご紹介資料 20170922
Db2 Warehouse ご紹介資料 20170922IBM Analytics Japan
 
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門Akira Shimosako
 
Db2 Warehouse セッション資料 db tech showcase
Db2 Warehouse セッション資料 db tech showcase Db2 Warehouse セッション資料 db tech showcase
Db2 Warehouse セッション資料 db tech showcase IBM Analytics Japan
 
DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所hdais
 
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較Shinya Sugiyama
 
binary log と 2PC と Group Commit
binary log と 2PC と Group Commitbinary log と 2PC と Group Commit
binary log と 2PC と Group CommitTakanori Sejima
 
[Cloud OnAir] Google Cloud とつなぐ色々な方法 〜 つなぐ方法をゼロからご紹介します〜 2019年1月31日 放送
[Cloud OnAir] Google Cloud とつなぐ色々な方法 〜 つなぐ方法をゼロからご紹介します〜 2019年1月31日 放送[Cloud OnAir] Google Cloud とつなぐ色々な方法 〜 つなぐ方法をゼロからご紹介します〜 2019年1月31日 放送
[Cloud OnAir] Google Cloud とつなぐ色々な方法 〜 つなぐ方法をゼロからご紹介します〜 2019年1月31日 放送Google Cloud Platform - Japan
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドAkihiro Suda
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較beyond Co., Ltd.
 
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...Anne Nicolas
 
Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計Koichi Nagaoka
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界Yoshinori Nakanishi
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察貴仁 大和屋
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門Masahito Zembutsu
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話Masahito Zembutsu
 
A12 既存のデータベース環境で分析業務を加速させるには? DB2が実現するソフトウエア分析ソリューション(DB2 BLU Acceleration)の仕...
A12 既存のデータベース環境で分析業務を加速させるには? DB2が実現するソフトウエア分析ソリューション(DB2 BLU Acceleration)の仕...A12 既存のデータベース環境で分析業務を加速させるには? DB2が実現するソフトウエア分析ソリューション(DB2 BLU Acceleration)の仕...
A12 既存のデータベース環境で分析業務を加速させるには? DB2が実現するソフトウエア分析ソリューション(DB2 BLU Acceleration)の仕...Insight Technology, Inc.
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)NTT DATA Technology & Innovation
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法Tetsutaro Watanabe
 

Tendances (20)

Db2 Warehouse ご紹介資料 20170922
Db2 Warehouse ご紹介資料 20170922Db2 Warehouse ご紹介資料 20170922
Db2 Warehouse ご紹介資料 20170922
 
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
 
Db2 Warehouse セッション資料 db tech showcase
Db2 Warehouse セッション資料 db tech showcase Db2 Warehouse セッション資料 db tech showcase
Db2 Warehouse セッション資料 db tech showcase
 
DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所DNSキャッシュサーバ チューニングの勘所
DNSキャッシュサーバ チューニングの勘所
 
MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較MySQLとPostgreSQLの基本的なバックアップ比較
MySQLとPostgreSQLの基本的なバックアップ比較
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
淺談探索 Linux 系統設計之道
淺談探索 Linux 系統設計之道 淺談探索 Linux 系統設計之道
淺談探索 Linux 系統設計之道
 
binary log と 2PC と Group Commit
binary log と 2PC と Group Commitbinary log と 2PC と Group Commit
binary log と 2PC と Group Commit
 
[Cloud OnAir] Google Cloud とつなぐ色々な方法 〜 つなぐ方法をゼロからご紹介します〜 2019年1月31日 放送
[Cloud OnAir] Google Cloud とつなぐ色々な方法 〜 つなぐ方法をゼロからご紹介します〜 2019年1月31日 放送[Cloud OnAir] Google Cloud とつなぐ色々な方法 〜 つなぐ方法をゼロからご紹介します〜 2019年1月31日 放送
[Cloud OnAir] Google Cloud とつなぐ色々な方法 〜 つなぐ方法をゼロからご紹介します〜 2019年1月31日 放送
 
BuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルドBuildKitによる高速でセキュアなイメージビルド
BuildKitによる高速でセキュアなイメージビルド
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
 
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...Embedded Recipes 2018 -  swupdate: update your embedded device - Charles-Anto...
Embedded Recipes 2018 - swupdate: update your embedded device - Charles-Anto...
 
Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計Dockerを利用したローカル環境から本番環境までの構築設計
Dockerを利用したローカル環境から本番環境までの構築設計
 
あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界あなたの知らないPostgreSQL監視の世界
あなたの知らないPostgreSQL監視の世界
 
Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察Gocon2017:Goのロギング周りの考察
Gocon2017:Goのロギング周りの考察
 
今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門今だからこそ知りたい Docker Compose/Swarm 入門
今だからこそ知りたい Docker Compose/Swarm 入門
 
ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話ZabbixのAPIを使って運用を楽しくする話
ZabbixのAPIを使って運用を楽しくする話
 
A12 既存のデータベース環境で分析業務を加速させるには? DB2が実現するソフトウエア分析ソリューション(DB2 BLU Acceleration)の仕...
A12 既存のデータベース環境で分析業務を加速させるには? DB2が実現するソフトウエア分析ソリューション(DB2 BLU Acceleration)の仕...A12 既存のデータベース環境で分析業務を加速させるには? DB2が実現するソフトウエア分析ソリューション(DB2 BLU Acceleration)の仕...
A12 既存のデータベース環境で分析業務を加速させるには? DB2が実現するソフトウエア分析ソリューション(DB2 BLU Acceleration)の仕...
 
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 

En vedette (14)

Phyto-oils
Phyto-oilsPhyto-oils
Phyto-oils
 
Principi di grafica
Principi di graficaPrincipi di grafica
Principi di grafica
 
Un lindo mensaje
Un lindo mensajeUn lindo mensaje
Un lindo mensaje
 
我行·你行·大家行03
我行·你行·大家行03我行·你行·大家行03
我行·你行·大家行03
 
我行·你行·大家行02
我行·你行·大家行02我行·你行·大家行02
我行·你行·大家行02
 
Process Groups
Process GroupsProcess Groups
Process Groups
 
Cand...
Cand...Cand...
Cand...
 
Generations atworkmodernsamplefinal
Generations atworkmodernsamplefinalGenerations atworkmodernsamplefinal
Generations atworkmodernsamplefinal
 
Powerpoint LiveWIRE 2009
Powerpoint LiveWIRE 2009Powerpoint LiveWIRE 2009
Powerpoint LiveWIRE 2009
 
Zambetul
ZambetulZambetul
Zambetul
 
Criza
CrizaCriza
Criza
 
Letters from the open source trenches - Postgres community
Letters from the open source trenches - Postgres communityLetters from the open source trenches - Postgres community
Letters from the open source trenches - Postgres community
 
Foldervisie
FoldervisieFoldervisie
Foldervisie
 
Retrospectiva
RetrospectivaRetrospectiva
Retrospectiva
 

Similaire à Bucardo

Cacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccCacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccsrisatish ambati
 
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingDynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingHostedbyConfluent
 
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingDynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingYaroslav Tkachenko
 
MongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB
 
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...MongoDB
 
MongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsMongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsServer Density
 
The DynaSlave Plugin
The DynaSlave PluginThe DynaSlave Plugin
The DynaSlave PluginBrian Moyles
 
London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015Chris Fregly
 
Scylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of ScyllaScylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of ScyllaScyllaDB
 
Games for the Masses (Jax)
Games for the Masses (Jax)Games for the Masses (Jax)
Games for the Masses (Jax)Wooga
 
Scale-Out Using Spark in Serverless Herd Mode!
Scale-Out Using Spark in Serverless Herd Mode!Scale-Out Using Spark in Serverless Herd Mode!
Scale-Out Using Spark in Serverless Herd Mode!Databricks
 
Scalable Elastic Systems Architecture (SESA)
Scalable Elastic Systems Architecture (SESA)Scalable Elastic Systems Architecture (SESA)
Scalable Elastic Systems Architecture (SESA)Eric Van Hensbergen
 

Similaire à Bucardo (14)

Bucardo
BucardoBucardo
Bucardo
 
Ruby's GC 20
Ruby's GC 20Ruby's GC 20
Ruby's GC 20
 
Cacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svccCacheconcurrencyconsistency cassandra svcc
Cacheconcurrencyconsistency cassandra svcc
 
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingDynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
 
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent HashingDynamic Change Data Capture with Flink CDC and Consistent Hashing
Dynamic Change Data Capture with Flink CDC and Consistent Hashing
 
MongoDB Basic Concepts
MongoDB Basic ConceptsMongoDB Basic Concepts
MongoDB Basic Concepts
 
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
 
MongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & AnalyticsMongoDB: Optimising for Performance, Scale & Analytics
MongoDB: Optimising for Performance, Scale & Analytics
 
The DynaSlave Plugin
The DynaSlave PluginThe DynaSlave Plugin
The DynaSlave Plugin
 
London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015London Spark Meetup Project Tungsten Oct 12 2015
London Spark Meetup Project Tungsten Oct 12 2015
 
Scylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of ScyllaScylla Summit 2018: Keynote - 4 Years of Scylla
Scylla Summit 2018: Keynote - 4 Years of Scylla
 
Games for the Masses (Jax)
Games for the Masses (Jax)Games for the Masses (Jax)
Games for the Masses (Jax)
 
Scale-Out Using Spark in Serverless Herd Mode!
Scale-Out Using Spark in Serverless Herd Mode!Scale-Out Using Spark in Serverless Herd Mode!
Scale-Out Using Spark in Serverless Herd Mode!
 
Scalable Elastic Systems Architecture (SESA)
Scalable Elastic Systems Architecture (SESA)Scalable Elastic Systems Architecture (SESA)
Scalable Elastic Systems Architecture (SESA)
 

Plus de Selena Deckelmann

While we're here, let's fix computer science education
While we're here, let's fix computer science educationWhile we're here, let's fix computer science education
While we're here, let's fix computer science educationSelena Deckelmann
 
Mistakes were made - LCA 2012
Mistakes were made - LCA 2012Mistakes were made - LCA 2012
Mistakes were made - LCA 2012Selena Deckelmann
 
Postgres needs an aircraft carrier
Postgres needs an aircraft carrierPostgres needs an aircraft carrier
Postgres needs an aircraft carrierSelena Deckelmann
 
Harder, better, faster, stronger: PostgreSQL 9.1
Harder, better, faster, stronger: PostgreSQL 9.1Harder, better, faster, stronger: PostgreSQL 9.1
Harder, better, faster, stronger: PostgreSQL 9.1Selena Deckelmann
 
Own it: working with a changing open source community
Own it: working with a changing open source communityOwn it: working with a changing open source community
Own it: working with a changing open source communitySelena Deckelmann
 
Managing terabytes: When Postgres gets big
Managing terabytes: When Postgres gets bigManaging terabytes: When Postgres gets big
Managing terabytes: When Postgres gets bigSelena Deckelmann
 
Managing terabytes: When PostgreSQL gets big
Managing terabytes: When PostgreSQL gets bigManaging terabytes: When PostgreSQL gets big
Managing terabytes: When PostgreSQL gets bigSelena Deckelmann
 
How a bunch of normal people Used Technology To Repair a Rigged Election
How a bunch of normal people Used Technology To Repair a Rigged ElectionHow a bunch of normal people Used Technology To Repair a Rigged Election
How a bunch of normal people Used Technology To Repair a Rigged ElectionSelena Deckelmann
 
Open Source Bridge Opening Day
Open Source Bridge Opening DayOpen Source Bridge Opening Day
Open Source Bridge Opening DaySelena Deckelmann
 
What Assumptions Make: Filesystem I/O from a database perspective
What Assumptions Make: Filesystem I/O from a database perspectiveWhat Assumptions Make: Filesystem I/O from a database perspective
What Assumptions Make: Filesystem I/O from a database perspectiveSelena Deckelmann
 

Plus de Selena Deckelmann (20)

While we're here, let's fix computer science education
While we're here, let's fix computer science educationWhile we're here, let's fix computer science education
While we're here, let's fix computer science education
 
Algorithms are Recipes
Algorithms are RecipesAlgorithms are Recipes
Algorithms are Recipes
 
Hire the right way
Hire the right wayHire the right way
Hire the right way
 
Mistakes were made - LCA 2012
Mistakes were made - LCA 2012Mistakes were made - LCA 2012
Mistakes were made - LCA 2012
 
Pg92 HA, LCA 2012, Ballarat
Pg92 HA, LCA 2012, BallaratPg92 HA, LCA 2012, Ballarat
Pg92 HA, LCA 2012, Ballarat
 
Managing terabytes
Managing terabytesManaging terabytes
Managing terabytes
 
Mistakes were made
Mistakes were madeMistakes were made
Mistakes were made
 
Postgres needs an aircraft carrier
Postgres needs an aircraft carrierPostgres needs an aircraft carrier
Postgres needs an aircraft carrier
 
Mistakes were made
Mistakes were madeMistakes were made
Mistakes were made
 
Harder, better, faster, stronger: PostgreSQL 9.1
Harder, better, faster, stronger: PostgreSQL 9.1Harder, better, faster, stronger: PostgreSQL 9.1
Harder, better, faster, stronger: PostgreSQL 9.1
 
How to ask for money
How to ask for moneyHow to ask for money
How to ask for money
 
Own it: working with a changing open source community
Own it: working with a changing open source communityOwn it: working with a changing open source community
Own it: working with a changing open source community
 
Managing terabytes: When Postgres gets big
Managing terabytes: When Postgres gets bigManaging terabytes: When Postgres gets big
Managing terabytes: When Postgres gets big
 
Managing terabytes: When PostgreSQL gets big
Managing terabytes: When PostgreSQL gets bigManaging terabytes: When PostgreSQL gets big
Managing terabytes: When PostgreSQL gets big
 
Pdxpugday2010 pg90
Pdxpugday2010 pg90Pdxpugday2010 pg90
Pdxpugday2010 pg90
 
Making Software Communities
Making Software CommunitiesMaking Software Communities
Making Software Communities
 
Illustrated buffer cache
Illustrated buffer cacheIllustrated buffer cache
Illustrated buffer cache
 
How a bunch of normal people Used Technology To Repair a Rigged Election
How a bunch of normal people Used Technology To Repair a Rigged ElectionHow a bunch of normal people Used Technology To Repair a Rigged Election
How a bunch of normal people Used Technology To Repair a Rigged Election
 
Open Source Bridge Opening Day
Open Source Bridge Opening DayOpen Source Bridge Opening Day
Open Source Bridge Opening Day
 
What Assumptions Make: Filesystem I/O from a database perspective
What Assumptions Make: Filesystem I/O from a database perspectiveWhat Assumptions Make: Filesystem I/O from a database perspective
What Assumptions Make: Filesystem I/O from a database perspective
 

Dernier

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersRaghuram Pandurangan
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfMounikaPolabathina
 

Dernier (20)

Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Generative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information DevelopersGenerative AI for Technical Writer or Information Developers
Generative AI for Technical Writer or Information Developers
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 
What is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdfWhat is DBT - The Ultimate Data Build Tool.pdf
What is DBT - The Ultimate Data Build Tool.pdf
 

Bucardo

  • 1. Bucardo: Replication with tiny little goats Selena Deckelmann selena@endpoint.com en dp oi nt .c om http://www.flickr.com/photos/kevincollins/
  • 2. Hi! ★ Software Engineer / Postgres Lead http://endpoint.com ★ We’re hiring! http://tr.im/EMGj en dp oi nt .c om
  • 3. en dp http://www.telegraph.co.uk/science/science-news/4409958/Extinct-ibex-is- oi nt .c resurrected-by-cloning.html om
  • 4. What can it do? en dp oi nt .c http://www.flickr.com/photos/8602783@N06/2294028540 om
  • 5. Master-slave • Scaling/Redundancy • UPGRADES (8.x -> 8.4) • Reporting databases • Data warehousing • Now handles SEQUENCES! en dp oi nt .c om
  • 6. Master-master • Write between both databases! • Sync type: SWAP • Conflict resolution en dp oi nt .c om
  • 7. Custom code • Respond to change • Filter • Run arbitrary code! en dp oi nt .c om
  • 8. STORY TIME! item ski item ski item ski item item ski item ski item onhand ski item skis 10 ski item ski item ski item ski on hand = count(item) en dp oi nt .c om
  • 9. prod db reporting db new! item NOTIFY bucardo ski sync B new! item syn ski cC on hand cA Y TIF +1 syn NO custom code count(items) and other stuff en dp oi nt .c om goat courtesy of: http://www.flickr.com/photos/nuritwilde/394603312
  • 10. Strengths • Drop-in, no changes to Postgres • Control daemon/DB can run anywhere • EXTREME async • No locking of slaves • Command-line controls rock! en dp oi nt .c om
  • 11. The Fine Print • No smooth DDL handling • Not for failover (aka high availability) • bloat: pg_listener, q, bucardo_delta, bucardo_track • No locking of slaves • No Windows support • One developer en dp oi nt .c om http://www.flickr.com/photos/ncarey/135901120/
  • 12. en dp oi nt .c http://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling om
  • 13. Bucardo Concepts en dp oi nt .c om http://www.flickr.com/photos/kendrick/361173694
  • 14. Glossary of terms • replication: copying data from one place to another • DDL: Data Definition Language (CREATE/ DROP/ALTER) • DML: Data Manipulation Language (SELECT/ INSERT/UPDATE/DELETE) • triggers: bits of code run before or after DML en dp oi nt .c om
  • 15. Glossary of terms • goat: a database object (table or sequence) • herd: table contains unique name for a group of goats • syncs: replication events (one herd per sync) en dp oi nt .c om
  • 16. flexible architecture bucardo control database master DB slave DB en dp oi nt .c om
  • 17. flexible architecture same db bucardo control cluster database master DB slave DB en dp oi nt .c om
  • 18. flexible architecture same db cluster bucardo control database master DB slave DB en dp oi nt .c om
  • 19. flexible architecture same db cluster bucardo control database master DB slave DB en dp oi nt .c om
  • 20. Installing en dp oi nt .c om http://www.flickr.com/photos/kendrick/361173694
  • 21. Bucardo Requirements • Postgres (8.3 or higher recommended) • Perl & some packages: • DBD::Pg 2.0 • DBI 1.51 • DBIx::Safe 1.2.4 • ExtUtils::MakeMaker 6.32 • pl/perlu and pl/pgsql en dp oi nt .c om
  • 22. Simple set up BUCARDO CONTROL database setup: bucardo_ctl install en dp oi nt .c om
  • 23. Simple set up MASTER setup: bucardo_ctl add db MyDB name=master bucardo_ctl add all tables herd=all_tables bucardo_ctl add all sequences herd=all_tables SLAVE setup: bucardo_ctl add db MyDB name=slave port=6543 en dp oi nt .c om
  • 24. Setting up, cont. TEST: bucardo_ctl validate all REPLICATE: bucardo_ctl add sync delta type=pushdelta source=all_tables targetdb=slave bucardo_ctl start (installs triggers!) en dp oi nt .c om
  • 25. Setting up • Initiate a one-time-copy: onetimecopy=[1|2] • Set up ongoing syncs: enabled by default (can set timeouts) • MANY configuration options en dp oi nt .c om
  • 26. Admin stuff • Can set up defaults in .bucardorc • Only need one ‘bucardo’ database • Uses the ‘bucardo’ schema in replication sets for ease of admin, removal en dp oi nt .c om
  • 27. Smooth upgrades! bucardo_ctl upgrade • Stop bucardo first (bucardo_ctl stop) • applies DDL changes, functions • see also UPGRADE file en dp oi nt .c om
  • 28. Stuff to watch out for • search_path for ‘bucardo’ user • PL/Perlu & pl/pgsql must be installed • Uses prepared statements, turn off with: bucardo_ctl update db MyDB server_side_prepares=0 en dp oi nt .c om
  • 29. LIVE DEMO! • http://github.com/selenamarie/ bucardo_examples en dp oi nt .c om
  • 30. Internals en dp oi nt http://www.flickr.com/photos/chelseagirlphotos .c om
  • 31. Internals bucardo=# d List of relations Schema | Name | Type | Owner ---------+-------------------------------+----------+--------- bucardo | audit_pid | table | bucardo bucardo | audit_pid_id_seq | sequence | bucardo bucardo | bucardo_config | table | bucardo bucardo | bucardo_custom_trigger | table | bucardo bucardo | bucardo_custom_trigger_id_seq | sequence | bucardo bucardo | bucardo_log_message | table | bucardo bucardo | bucardo_rate | table | bucardo bucardo | customcode | table | bucardo bucardo | customcode_id_seq | sequence | bucardo bucardo | customcode_map | table | bucardo bucardo | db | table | bucardo bucardo | db_connlog | table | bucardo bucardo | dbgroup | table | bucardo bucardo | dbmap | table | bucardo bucardo | goat | table | bucardo bucardo | goat_id_seq | sequence | bucardo bucardo | herd | table | bucardo bucardo | herdmap | table | bucardo bucardo | q | table | bucardo bucardo | sync | table | bucardo bucardo | upgrade_log | table | bucardo en (21 rows) dp oi nt .c om
  • 32. goats Table "bucardo.goat" Column | Type | ----------------------+--------------------------+ id | integer | db | text | schemaname | text | tablename | text | reltype | text | pkey | text | qpkey | text | pkeytype | text | has_delta | boolean | ping | boolean | ... en dp oi nt .c om
  • 33. goats # bucardo_ctl list tables Table: archive.course_logging DB: odw_master PK: none Table: archive.messages DB: odw_master PK: none Table: archive.student_assignments DB: odw_master PK: none Table: archive.student_courses DB: odw_master PK: none Table: logging.activity DB: odw_master PK: activity_name (varchar) Table: logging.course_logging DB: odw_master PK: course_logging_id (int4) Table: public.ecash_transaction DB: odw_master PK: trans_id (int4) Table: public.feedback DB: odw_master PK: date (timestamp) Table: public.holidays DB: odw_master PK: customernum|month|day| year (int4|int4|int4|int4) ... en dp oi nt .c om
  • 34. bucardo_ctl list sequences Sequence 63: logging.logging_seq Sequence 64: public.trans_id_seq Sequence 65: public.num_seq Sequence 66: public.upload_seq en dp oi nt .c om
  • 35. bucardo database bucardo=# d List of relations Schema | Name | Type | Owner ---------+-------------------------------+----------+--------- ... bucardo | db | table | bucardo bucardo | db_connlog | table | bucardo bucardo | dbgroup | table | bucardo bucardo | dbmap | table | bucardo bucardo | goat | table | bucardo bucardo | goat_id_seq | sequence | bucardo bucardo | herd | table | bucardo bucardo | herdmap | table | bucardo bucardo | q | table | bucardo bucardo | sync | table | bucardo bucardo | upgrade_log | table | bucardo (21 rows) en dp oi nt .c om
  • 36. Status # bucardo_ctl status Days back: 3 User: bucardo Database: bucardo Port: 8000 PID of Bucardo MCP: 6876 Name Type State PID Last_good Time I/U/D Last_bad Time ========+=====+=====+====+=========+=====+=====+========+==== a_delta | P |idle |6886|1m4s |0s |0/0/0|unknown | b_delta | P |idle |6885|1m4s |0s |0/0/0|9h32m47s|0s c_delta | P |idle |6887|1m4s |0s |0/0/0|unknown | d_delta | P |idle |6888|54s |0s |0/0/0|2m6s |3s e_delta | P |idle |6890|1m4s |0s |0/0/0|9h32m47s|0s f_delta | P |idle |6889|1m4s |0s |0/0/0|9h32m47s|0s en dp oi nt .c om
  • 37. # bucardo_ctl status a_delta Days back: 3 User: bucardo Database: bucardo Port: 8000 ====================================================================== Sync name: a_delta Current state: idle (PID = 6888) Type: pushdelta Source herd/database: all_a / a_master Target database: a_slave Tables in sync: 26 Last good: 3m 34s (time to run: 0s) Last good time: Oct 16, 2009 17:52:20 Target: a_slave Ins/Upd/Del: 20 / 0 / 50 Last bad: 4m 47s (time to run: 3s) Last bad time: Oct 16, 2009 17:51:08 Target: a_slave Latest bad reason: ? PID file: /var/run/bucardo/bucardo.ctl.sync.a_delta.pid PID file created: Fri Oct 16 17:52:09 2009 Status: active Limitdbs: 0 Priority: 0 Checktime: none Overdue time: 00:00:00 Expired time: 00:00:00 Stayalive: yes Kidsalive: yes Rebuild index: 0 Do_listen: yes Ping: yes Makedelta: no en dp Onetimecopy: 0 oi nt .c om
  • 39. Triggers INSERT, UPDATE, DELETE bucardo_add_delta IN SE RT bucardo_delta bucardo_triggerkick_[sync] NOTIFY! en dp oi nt .c om
  • 40. NOTIFY / LISTEN • Simple interprocess communication psql# LISTEN scotch; psql# NOTIFY scotch; Asynchronous notification "scotch" received from server process with PID 1337. • Any Postgres process can listen in en dp oi nt .c om
  • 41. Actual Triggers! Table "public.test" Column | Type | Modifiers --------+-----------------------+----------- test | character varying(15) | not null Indexes: "test_pkey" PRIMARY KEY, btree ("test") Triggers: bucardo_add_delta AFTER INSERT OR DELETE OR UPDATE ON test FOR EACH ROW EXECUTE PROCEDURE bucardo_add_delta_role() bucardo_triggerkick_a_delta AFTER INSERT OR DELETE OR UPDATE ON test FOR EACH STATEMENT EXECUTE PROCEDURE bucardo_triggerkick_a_delta() en dp oi nt .c om
  • 42. Bucardo NOTIFY NOTIFY NOTIFY MCP CTL KID TRIGGER INSERT INTO “q” SELECT from “q” UPDATE “q” Flow of control REPLICATION en EVENT! dp oi nt .c om
  • 43. How Syncs happen • NOTIFY vs. timeout vs. kick • NOTIFY - from master db to MCP • timeout - controller detects • kick - manual/from MCP to controller en dp oi nt .c om
  • 44. Processes! • MCP, CTL, KID • MCP: master control process • CTL: controller (track, kick off/kill KIDs) • KID: sync processes en dp oi nt .c om
  • 45. Administrativa • Totally ok to kill KIDs • CTL cleans up after you • May need to kill open database handles (for unfinished COPYs, etc) en dp oi nt .c om
  • 46. Other interesting tables On your master DB: • bucardo_delta table has: ID, txn_time • bucardo_track table: who’s done what? en dp oi nt .c om
  • 47. Sync types • Fullcopy. Timeout/kick. TRUNCATE or DELETE, then COPY • Pushdelta. Trigger. One way master-slave. • Swap. Trigger. Two-way. Conflict resolution. en dp oi nt .c om
  • 48. Note about triggers: • canonical way to disable triggers: ALTER TABLE DISABLE TRIGGER ALL; :( • pre 8.3 way: UPDATE pg_class.. • SET session_replication_role = ‘replica’; • Applies to just the current session • Thanks, Jan! en dp oi nt .c om
  • 49. Dealing with failure • Troubleshooting • Backing up Bucardo itself • What happens when you lose the Bucardodb? en dp oi nt .c om
  • 50. Bucardo hooks • LIVE DATA CHANGES! • pass in a hashref (ROW or ROWINFO) • Returned value - bitmapped (a/b or both!) • Affect the replication event, side effects • Example: cache invalidation en dp oi nt .c om
  • 51. Bucardo Hooks • customcode & customcode_map • Conflict handlers (SWAP syncs) • Pure Perl • Exception - fix and try again • Pre and post trigger en dp oi nt .c om
  • 52. Development • bucardo.org • mailing lists: http://bucardo.org/wiki/ Bucardo_mailing_list • Release early, often. • Please submit patches! bug reports! tests! en dp oi nt .c om
  • 53. Questions? .com nt oi dp en
  • 54. Thanks! http://www.slideshare.net/selenamarie/bucardo selena@endpoint.com @selenamarie on Twitter rss: http://www.chesnok.com/daily en dp oi nt .c om