Schemas and Databases in an Agile World

Schemas and Databases in an Agile World

A talk I gave at CRAFT 2014 in Budapest

077e9a0cb34fa3eba2699240c9509717?s=128

Andrew Godwin

April 24, 2014
Tweet

Transcript

  1. 4.

    Explicit Schema ID int Name text Weight uint 1 2

    3 Alice Bob Charles 76 84 65 Implicit Schema { "id": 342, "name": "David", "weight": 44, }
  2. 5.

    Silent Failure { "id": 342, "name": "David", "weight": 74, }

    { "id": 342, "name": "Ellie", "weight": "85kg", } { "id": 342, "nom": "Frankie", "weight": 77, } { "id": 342, "name": "Frankie", "weight": -67, }
  3. 14.

    You can't put your database in a VCS You can

    put your schema in a VCS But your data won't always survive.
  4. 16.
  5. 19.

    The Nesting Problem { "id": 123, "name": "Andrew", "friends": [

    {"id": 456, "name": "David"}, {"id": 789, "name": "Mazz"}, ], "likes": [ {"id": 22, "liker": {"id": 789, "name", "Mazz"}}, ], }
  6. 21.

    Schemaless Columns ID int Name text Weight uint Data json

    1 Alice 76 { "nickname": "Al", "bgcolor": "#ff0033" }
  7. 23.

    Comparison (never trust benchmarks) Loading 1.2 million records PostgreSQL MongoDB

    76 sec 8 min Sequential scan PostgreSQL MongoDB 980 ms 980 ms Index scan (Postgres GINhash) PostgreSQL MongoDB 0.7 ms 1 ms
  8. 25.

    A hybrid solution Normal columns for more static data (e.g.

    id, title) Schemaless blobs for variable data (e.g. styling)
  9. 26.