• ALL
  • LEETCODE
  • RSS
  • AWS KMS

    2019年11月14日

    We used to keep private credentials on production servers without any protection or encryption. Well, luckily we don’t have any leak but this practice is not recommended for both security and easy of use reasons.

    Since AWS finally provides KMS(Key Management Service) in our local region, we try to encrypt every private credentials by KMS and store them on S3.

    TBD

  • Postgresql Partitioning

    2019年3月12日

    Partitioning refers to splitting what is logically one large table inot smaller physical pieces.

    Currently, PostgreSQL supports partitioning via table inheritance. Each partition must be created as a child table of a single parent table. The parent table itself is normally empty; It exists just to represent the entire data set.

    There are two forms of partitioning can be implemented in PostgreSQL:

    • Range Partitioning

      ​ The table is partitioning into “range” defined by a key column or a set of columns, with no overlap between the ranges of values assigned to different partitions. eg. partition by date ranges or by identifiers.

    • List Partitioning

      ​ The table is partitioned by explicitly listing which key values appear in each partition.

    Implementing Partitioning

    1. Create the “master” / “parent” table, from which all the partitions will inherit.

      ​ This table will not contain any data. Do not define any check on this table, unless you intend them to be applied equally to all partitions. There is no point in defining any indexes or unique constraints on it either.

    2. Create “child” tables that each inherit form the master table. Normally, these tables will not add any columns to the set inherited from the master.

    3. Add table constraints to the partition tables to define the allowed key values in each partitions.

      ​ Ensure that the constraints guarantee that there is no overlap between the key values premitted in different partitions. And there is no difference in syntax between range and list partitioning.

    4. Create indexes on column(s) for each partitions.

    5. Optionally, define a trigger or rule to redirect data inserted into the master table to the appropriate partition.

    6. Ensure hte constraint_exclusion configuration parameter is not disabled in postgresql.conf. If it is, queries will not be optimized as desired.

    Trigger

    As we are creating new table and hopping data insered to right partition, a trigger function and a trigger are needed.