← Extractions

Fantastic Databases and Where to Find Them — wroclove.rb 2023

Krzysztof 'Chris' Hasiński surveys databases Ruby developers should be less afraid of: SQLite's surprising capacity, PostgreSQL's versatility (unlogged tables, window functions, EXPLAIN, indexes, extensions like Citus), MySQL's speed and MVCC differences, plus exotic choices CockroachDB and ClickHouse. Ends with Q&A on EXPLAIN cost units and unlogged-table durability.

Model
claude-opus-4-7
Ingestion
bef18149
Input tokens
463,912
fresh
320,612
cached
133,059
cache write
10,241
Output tokens
17,062
Duration
269.4s
Roundtrips
10
Tool calls
25
Cost
$0.00
Nodes/edges extracted
29 / 55
Read set (nodes/edges)
107 / 9

Nodes (29)

update Fantastic Databases and Where to Find Them talk
description Talk at wroclove.rb 2023. Krzysztof 'Chris' Hasiński's wroclove.rb 2023 talk framed around the 'here be dragons' metaphor (and the Lennox Globe...
short_description Talk at wroclove.rb 2023. wroclove.rb 2023 talk touring SQLite, Postgres, MySQL and exotic databases for Ruby devs.
update Krzysztof Hasiński person
description Ruby developer who goes by 'Chris' because his Polish name is hard for English speakers to pronounce. Filled a missin... Ruby developer who goes by 'Chris' because his Polish name is hard for English speakers to pronounce. Filled a missin...
short_description Ruby developer; wroclove.rb speaker on developer feedback loops. Ruby developer; wroclove.rb speaker on developer feedback loops and databases.
update SQLite tool
description Embedded SQL database. Mentioned as also supporting in-RAM storage, making it another candidate for the MySQL-in-RAM ... Embedded public-domain SQL database engine. Extremely fast — the sqlite.org site itself handles ~20M SQL queries/day ...
update PostgreSQL tool
description Mentioned as a possible read-model store alongside alternatives like Elasticsearch or Cassandra. Open-source relational database; in Hasiński's opinion 'probably the best open-source project ever'. Extremely versat...
update MySQL tool
description Relational database. Referenced in the closing Q&A: an audience member cut a test suite from ~10 minutes to ~1 minute... Relational database now owned by Oracle (after Larry Ellison's acquisition). 'Seriously different now' — a valid mode...
create Citus tool
kind (empty) tool
name (empty) Citus
slug (empty) citus
attrs (empty) {"category" => "library"}
description (empty) PostgreSQL extension (pronunciation unclear in the talk) that merges several extensions into one, most notably column...
short_description (empty) PostgreSQL extension bundling columnar storage, distributed tables and parallel querying.
create CockroachDB tool
kind (empty) tool
name (empty) CockroachDB
slug (empty) cockroachdb
attrs (empty) {"category" => "service"}
description (empty) Exotic distributed SQL database that does automatically what Citus exposes: auto-sharding, distributed data with hots...
short_description (empty) Distributed SQL database with auto-sharding and geo-aware replication.
create ClickHouse tool
kind (empty) tool
name (empty) ClickHouse
slug (empty) clickhouse
attrs (empty) {"category" => "service"}
description (empty) Columnar analytical database originally built for Yandex's marketing data. Offers multiple table engines that provide...
short_description (empty) Columnar OLAP database from Yandex for analytical workloads.
create PgHero tool
kind (empty) tool
name (empty) PgHero
slug (empty) pghero
attrs (empty) {"category" => "library"}
description (empty) Postgres performance-monitoring gem/app by Andrew Kane with a solid algorithm for detecting missing indexes. Speaker ...
short_description (empty) Postgres performance dashboard by Andrew Kane; finds missing indexes.
create Andrew Kane person
kind (empty) person
name (empty) Andrew Kane
slug (empty) andrew-kane
description (empty) Prolific Ruby and Postgres open-source author. Cited as the creator of PgHero, whose missing-index algorithm Hasiński...
short_description (empty) Ruby/Postgres open-source author; creator of PgHero.
create Midjourney tool
kind (empty) tool
name (empty) Midjourney
slug (empty) midjourney
attrs (empty) {"category" => "service"}
description (empty) AI image-generation tool (spoken as 'bin journey' in the auto-transcript). Used by Hasiński to generate the talk's il...
short_description (empty) AI image-generation service.
create Postgres for Everything resource
kind (empty) resource
name (empty) Postgres for Everything
slug (empty) postgres-for-everything
attrs (empty) {"type" => "blog-post"}
description (empty) Widely-circulated 'Amazing CTO' blog post by Stephan Schmidt enumerating cases in which PostgreSQL can replace other ...
short_description (empty) Stephan Schmidt blog post listing ways Postgres can replace other stack components.
create Stephan Schmidt person
kind (empty) person
name (empty) Stephan Schmidt
slug (empty) stephan-schmidt
description (empty) Tech author behind the 'Amazing CTO' blog, author of the 'Postgres for Everything' article that Hasiński cites. Name ...
short_description (empty) Author of the 'Amazing CTO' blog.
create Unlogged Tables concept
kind (empty) concept
name (empty) Unlogged Tables
slug (empty) unlogged-tables
attrs (empty) {"category" => "pattern"}
description (empty) PostgreSQL table option where the write-ahead log isn't written — much faster than normal storage but wiped if the da...
short_description (empty) PostgreSQL tables that skip the write-ahead log for speed.
create Window Functions concept
kind (empty) concept
name (empty) Window Functions
slug (empty) window-functions
attrs (empty) {"category" => "pattern"}
description (empty) SQL feature using OVER (and optional PARTITION BY / ORDER BY) that applies a calculation per row while being aware of...
short_description (empty) SQL functions that compute values across a set of rows related to the current row.
create EXPLAIN / EXPLAIN ANALYZE concept
kind (empty) concept
name (empty) EXPLAIN / EXPLAIN ANALYZE
slug (empty) explain-explain-analyze
attrs (empty) {"category" => "practice"}
description (empty) PostgreSQL introspection: EXPLAIN returns the planner's strategy tree (sequential scan, hash, hash join, nested loop,...
short_description (empty) PostgreSQL query-plan inspection and execution profiling.
create Columnar Storage concept
kind (empty) concept
name (empty) Columnar Storage
slug (empty) columnar-storage
attrs (empty) {"category" => "architecture"}
description (empty) Alternative on-disk storage layout where each column is stored together rather than each row. Typical for analytical/...
short_description (empty) Storing table data column-by-column instead of row-by-row for analytical speed.
create Partial Index concept
kind (empty) concept
name (empty) Partial Index
slug (empty) partial-index
attrs (empty) {"category" => "pattern"}
description (empty) PostgreSQL index with a WHERE predicate that restricts which rows are indexed, making the index smaller and faster. I...
short_description (empty) Index covering only rows matching a WHERE clause.
create Covering Index concept
kind (empty) concept
name (empty) Covering Index
slug (empty) covering-index
attrs (empty) {"category" => "pattern"}
description (empty) PostgreSQL index that uses INCLUDE to carry extra columns not used for filtering or sorting, purely so that queries s...
short_description (empty) Index that includes extra columns via INCLUDE for index-only scans.
create Test Pyramid concept
kind (empty) concept
name (empty) Test Pyramid
slug (empty) test-pyramid
attrs (empty) {"category" => "methodology"}
description (empty) Idealized testing-strategy model: many fast unit tests at the base, a layer of integration tests for components that ...
short_description (empty) Testing strategy model — many unit tests, some integration, few end-to-end.
create MVCC Trade-offs in Postgres vs MySQL concept
kind (empty) concept
name (empty) MVCC Trade-offs in Postgres vs MySQL
slug (empty) mvcc-trade-offs-in-postgres-vs-mysql
attrs (empty) {"category" => "architecture"}
description (empty) Contrasting approaches to multi-version concurrency control: Postgres handles an UPDATE by marking the old row stale ...
short_description (empty) How Postgres and MySQL implement multi-version concurrency control differently.
create estimate_count gem project
kind (empty) project
name (empty) estimate_count gem
slug (empty) estimate_count-gem
attrs (empty) {"status" => "active", "license" => "open-source"}
description (empty) Small Ruby gem by Krzysztof Hasiński that wraps Postgres' EXPLAIN-based row-count estimation, exposing `estimate_coun...
short_description (empty) Ruby gem exposing Postgres EXPLAIN row-count estimates without migrations.
create Lennox Globe resource
kind (empty) resource
name (empty) Lennox Globe
slug (empty) lennox-globe
attrs (empty) {"type" => "article"}
description (empty) Historical globe bearing the Latin inscription 'HC SVNT DRACONES' ('here be dragons') — one of the few actual cartogr...
short_description (empty) Early 16th-century globe bearing the Latin inscription 'HC SVNT DRACONES'.
create EXPLAIN cost units meaning question
kind (empty) question
name (empty) EXPLAIN cost units meaning
slug (empty) explain-cost-units-meaning
attrs (empty) {"answer_summary" => "Costs are unitless 'story points' — configurable in postgres.conf. Planner sums per-operation b...
description (empty) Audience question: EXPLAIN's cost numbers are hard to interpret — is 100 high? Answer: they're effectively 'story poi...
short_description (empty) How should the numbers in Postgres EXPLAIN cost estimates be interpreted?
create Unlogged table durability on connection reset question
kind (empty) question
name (empty) Unlogged table durability on connection reset
slug (empty) unlogged-table-durability-on-connection-reset
attrs (empty) {"answer_summary" => "Connection reset likely doesn't wipe them, but any database restart or crash does. Fine for CI,...
description (empty) Audience question: unlogged tables are wiped when the database is restarted — does the same happen on a connection re...
short_description (empty) Are Postgres unlogged tables wiped on connection reset as well as DB restart?
create Use Unlogged Tables to Speed Up Rails Test Suites takeaway
kind (empty) takeaway
name (empty) Use Unlogged Tables to Speed Up Rails Test Suites
slug (empty) use-unlogged-tables-to-speed-up-rails-test-suites
attrs (empty) {"type" => "recommendation"}
description (empty) Appending a one-liner to `rails_helper` so RSpec creates all test tables as Postgres UNLOGGED shaved ~3.5 minutes off...
short_description (empty) Forcing RSpec to create unlogged tables shaves minutes off test runs.
create Rails Tests Are Mostly Integration Tests takeaway
kind (empty) takeaway
name (empty) Rails Tests Are Mostly Integration Tests
slug (empty) rails-tests-are-mostly-integration-tests
attrs (empty) {"type" => "insight"}
description (empty) Typical Rails applications are glorified points of interaction with a database, so the idealized test pyramid (mostly...
short_description (empty) The test pyramid doesn't apply to Rails; treat DB-backed tests as integration tests.
create Prefer SQL Window Functions over Ruby Aggregation takeaway
kind (empty) takeaway
name (empty) Prefer SQL Window Functions over Ruby Aggregation
slug (empty) prefer-sql-window-functions-over-ruby-aggregation
attrs (empty) {"type" => "recommendation"}
description (empty) Computations like 'average salary per department', 'cheapest product per category' or cumulative sums are dramaticall...
short_description (empty) Window functions replace two-query-and-combine logic with one fast query.
create Learn to Read EXPLAIN takeaway
kind (empty) takeaway
name (empty) Learn to Read EXPLAIN
slug (empty) learn-to-read-explain
attrs (empty) {"type" => "lesson-learned"}
description (empty) Learn the EXPLAIN output: strategies form a tree (seq scan, hash, hash join, nested loop, filter); each node reports ...
short_description (empty) Reading EXPLAIN output is the prerequisite for debugging slow Postgres queries.

Edges (55)

update Krzysztof HasińskiauthoredFantastic Databases and Where to Find Them
context (empty) Chris (Krzysztof) Hasiński delivered this talk.
update Fantastic Databases and Where to Find Thempresented_atwroclove.rb 2023
context (empty) Talk given at wroclove.rb 2023.
create Krzysztof Hasińskiattendedwroclove.rb 2023
context (empty) Speaker at wroclove.rb 2023.
relation (empty) attended
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) f1adcf6d-780c-4418-8a81-c88da8b4e631
create Fantastic Databases and Where to Find ThemaboutSQLite
context (empty) Covers SQLite as a surprisingly capable small database.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) a65d4872-7d76-4774-a7d5-e29e615de75a
create Fantastic Databases and Where to Find ThemaboutPostgreSQL
context (empty) Bulk of the talk explores Postgres features.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create Fantastic Databases and Where to Find ThemaboutMySQL
context (empty) Framed as a serious modern alternative with faster MVCC.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 289579fa-6259-4a46-8faa-34ed85eb41d4
create Fantastic Databases and Where to Find ThemaboutCitus
context (empty) Highlighted Postgres extension for columnar storage, distributed tables and parallel querying.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 17c150ae-bc34-46fa-9cbd-977c5a5e70cb
create Fantastic Databases and Where to Find ThemaboutCockroachDB
context (empty) Presented as a distributed, geo-aware 'auto-Citus' exotic database.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 4434c773-7f31-42da-8f04-b9fe8b9302a0
create Fantastic Databases and Where to Find ThemaboutClickHouse
context (empty) Presented as an exotic columnar analytical database from Yandex.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 673a7665-128e-4cd3-ab50-f1975827f7ce
create Fantastic Databases and Where to Find ThemaboutWindow Functions
context (empty) Dedicated section demonstrating window functions as a 'freakishly powerful' Postgres feature.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 6e5dfa58-bc10-4462-bced-0e8525568cdd
create Fantastic Databases and Where to Find ThemaboutUnlogged Tables
context (empty) Unlogged tables used as a fast cache and test-speedup trick.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) a359976f-78df-4c42-a467-8acfaf9750cd
create Fantastic Databases and Where to Find ThemaboutEXPLAIN / EXPLAIN ANALYZE
context (empty) Long walkthrough of how to read and use EXPLAIN/ANALYZE/BUFFERS.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 5a7670f8-439c-4364-b193-f80d93e82e09
create Fantastic Databases and Where to Find ThemaboutDatabase Indexes
context (empty) Covers index rules, PgHero, partial and covering indexes.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 6985ed7e-5155-4334-8bd8-8c77cddb369a
create Fantastic Databases and Where to Find ThemaboutPartial Index
context (empty) Recommends mirroring the query's WHERE in partial indexes.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 1ffaecd1-6374-4f6e-b7d4-fc6f79ef9150
create Fantastic Databases and Where to Find ThemaboutCovering Index
context (empty) Mentions INCLUDE columns for index-only scans as under-used.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 8dc1cb0e-ca4a-4d54-a7cf-b5a523de5d04
create Fantastic Databases and Where to Find ThemaboutColumnar Storage
context (empty) Explains columnar storage via Citus for analytical workloads.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 4a295d43-6e3d-4a21-bb54-5e98efde859d
create Fantastic Databases and Where to Find ThemaboutTest Pyramid
context (empty) Opens with the test pyramid vs the inverted shape to motivate why Rails tests are integration tests.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 9a38f930-f660-47aa-9fc4-3debba3c4fd7
create Fantastic Databases and Where to Find ThemaboutMVCC Trade-offs in Postgres vs MySQL
context (empty) Explains Postgres stale-row + VACUUM vs MySQL update-in-place + rollback segment.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 1af399a0-e843-4f3d-a28d-f563d70a38af
create Fantastic Databases and Where to Find ThemaboutRuby on Rails
context (empty) Framed around Rails developers' relationship with databases.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 7aac705a-0987-49f2-b665-9d4e08a6acee
create Fantastic Databases and Where to Find ThemaboutPostgres for Everything
context (empty) Cites Stephan Schmidt's article listing Postgres replacing parts of a typical stack.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) 2b84497d-26c1-4572-8d7d-60bd28f28aa1
create Fantastic Databases and Where to Find ThemaboutLennox Globe
context (empty) Opening metaphor: 'HC SVNT DRACONES' on the Lennox globe equals databases on a Rails dev's mental map.
relation (empty) about
source_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
target_node_id (empty) ef3a9279-47d1-4494-913c-089bc4c21d41
create Stephan SchmidtauthoredPostgres for Everything
context (empty) Stephan Schmidt wrote the blog post.
relation (empty) authored
source_node_id (empty) f5c4790d-b0e6-4284-83e2-56e8f6f4df4a
target_node_id (empty) 2b84497d-26c1-4572-8d7d-60bd28f28aa1
create Andrew Kaneworks_onPgHero
attrs (empty) {"role" => "author"}
context (empty) Hasiński credits Andrew Kane as author of PgHero.
relation (empty) works_on
source_node_id (empty) 48cd8d9c-c040-4849-8801-36114d7879d3
target_node_id (empty) c6ab7ebd-677e-4228-b33d-220c9df57a1c
create Krzysztof Hasińskiworks_onestimate_count gem
attrs (empty) {"role" => "author"}
context (empty) Wrote the gem exposing EXPLAIN-based estimate_count; 'shameless plug' in the talk.
relation (empty) works_on
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) 64811cec-be4d-4ec5-95d5-4cca71e3cb7d
create estimate_count gemusesPostgreSQL
context (empty) Gem leverages Postgres EXPLAIN statistics for fast count estimation.
relation (empty) uses
source_node_id (empty) 64811cec-be4d-4ec5-95d5-4cca71e3cb7d
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create estimate_count gemusesEXPLAIN / EXPLAIN ANALYZE
context (empty) Implemented on top of EXPLAIN's row-count estimate.
relation (empty) uses
source_node_id (empty) 64811cec-be4d-4ec5-95d5-4cca71e3cb7d
target_node_id (empty) 5a7670f8-439c-4364-b193-f80d93e82e09
create Krzysztof HasińskiusesMidjourney
context (empty) Generated the talk's illustrations of databases as animals with Midjourney.
relation (empty) uses
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) 6f8bc292-5007-42cb-bbda-ef7de64c299d
create Krzysztof HasińskirecommendsPgHero
context (empty) Recommends PgHero's missing-index algorithm.
relation (empty) recommends
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) c6ab7ebd-677e-4228-b33d-220c9df57a1c
create Krzysztof HasińskirecommendsPostgres for Everything
context (empty) Calls it an amazing article worth reading.
relation (empty) recommends
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) 2b84497d-26c1-4572-8d7d-60bd28f28aa1
create Krzysztof HasińskirecommendsPostgreSQL
context (empty) Calls Postgres 'probably the best open-source project ever'.
relation (empty) recommends
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create Krzysztof HasińskirecommendsUnlogged Tables
context (empty) Recommends flipping RSpec tables to unlogged for big CI speedups.
relation (empty) recommends
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) a359976f-78df-4c42-a467-8acfaf9750cd
create Krzysztof HasińskirecommendsWindow Functions
context (empty) Urges Rails devs to use window functions instead of two-query-plus-Ruby combining.
relation (empty) recommends
source_node_id (empty) 5d1051ea-ed4d-4fd6-a87f-5976ec8aa8f8
target_node_id (empty) 6e5dfa58-bc10-4462-bced-0e8525568cdd
create Citusrelated_toPostgreSQL
context (empty) Citus is a Postgres extension.
relation (empty) related_to
source_node_id (empty) 17c150ae-bc34-46fa-9cbd-977c5a5e70cb
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create PgHerorelated_toPostgreSQL
context (empty) PgHero is a Postgres performance dashboard.
relation (empty) related_to
source_node_id (empty) c6ab7ebd-677e-4228-b33d-220c9df57a1c
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create ClickHouserelated_toColumnar Storage
context (empty) ClickHouse is a columnar database.
relation (empty) related_to
source_node_id (empty) 673a7665-128e-4cd3-ab50-f1975827f7ce
target_node_id (empty) 4a295d43-6e3d-4a21-bb54-5e98efde859d
create Citusrelated_toColumnar Storage
context (empty) Citus provides columnar storage in Postgres via USING columnar.
relation (empty) related_to
source_node_id (empty) 17c150ae-bc34-46fa-9cbd-977c5a5e70cb
target_node_id (empty) 4a295d43-6e3d-4a21-bb54-5e98efde859d
create Citusrelated_toHorizontal Sharding
context (empty) Citus distributed tables implement horizontal sharding within Postgres.
relation (empty) related_to
source_node_id (empty) 17c150ae-bc34-46fa-9cbd-977c5a5e70cb
target_node_id (empty) 8d7c314e-2d7a-452c-a347-2f287d957785
create CockroachDBrelated_toHorizontal Sharding
context (empty) CockroachDB auto-shards distributed data.
relation (empty) related_to
source_node_id (empty) 4434c773-7f31-42da-8f04-b9fe8b9302a0
target_node_id (empty) 8d7c314e-2d7a-452c-a347-2f287d957785
create EXPLAIN / EXPLAIN ANALYZErelated_toPostgreSQL
context (empty) EXPLAIN is a Postgres feature.
relation (empty) related_to
source_node_id (empty) 5a7670f8-439c-4364-b193-f80d93e82e09
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create Window Functionsrelated_toPostgreSQL
context (empty) Demonstrated against Postgres.
relation (empty) related_to
source_node_id (empty) 6e5dfa58-bc10-4462-bced-0e8525568cdd
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create Unlogged Tablesrelated_toPostgreSQL
context (empty) Unlogged tables are a Postgres feature.
relation (empty) related_to
source_node_id (empty) a359976f-78df-4c42-a467-8acfaf9750cd
target_node_id (empty) 46fc2697-69fc-436b-ac82-250ba4370273
create Partial Indexrelated_toDatabase Indexes
context (empty) Partial index is a kind of database index.
relation (empty) related_to
source_node_id (empty) 1ffaecd1-6374-4f6e-b7d4-fc6f79ef9150
target_node_id (empty) 6985ed7e-5155-4334-8bd8-8c77cddb369a
create Covering Indexrelated_toDatabase Indexes
context (empty) Covering (INCLUDE) index is a kind of database index.
relation (empty) related_to
source_node_id (empty) 8dc1cb0e-ca4a-4d54-a7cf-b5a523de5d04
target_node_id (empty) 6985ed7e-5155-4334-8bd8-8c77cddb369a
create EXPLAIN cost units meaningasked_atFantastic Databases and Where to Find Them
context (empty) Asked during the Q&A.
relation (empty) asked_at
source_node_id (empty) b7915769-9c29-4606-ae8b-9f14c4881a1a
target_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
create EXPLAIN cost units meaningaboutEXPLAIN / EXPLAIN ANALYZE
context (empty) Question about how to interpret EXPLAIN cost numbers.
relation (empty) about
source_node_id (empty) b7915769-9c29-4606-ae8b-9f14c4881a1a
target_node_id (empty) 5a7670f8-439c-4364-b193-f80d93e82e09
create Unlogged table durability on connection resetasked_atFantastic Databases and Where to Find Them
context (empty) Asked during the Q&A.
relation (empty) asked_at
source_node_id (empty) 1e6263d9-de64-4b8d-abe3-fae3d046b497
target_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
create Unlogged table durability on connection resetaboutUnlogged Tables
context (empty) Asks whether a connection reset wipes unlogged tables.
relation (empty) about
source_node_id (empty) 1e6263d9-de64-4b8d-abe3-fae3d046b497
target_node_id (empty) a359976f-78df-4c42-a467-8acfaf9750cd
create Use Unlogged Tables to Speed Up Rails Test Suitesfrom_talkFantastic Databases and Where to Find Them
context (empty) Takeaway from the unlogged-tables section.
relation (empty) from_talk
source_node_id (empty) a16f51f2-507b-4792-9b85-e2fba9b544b4
target_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
create Use Unlogged Tables to Speed Up Rails Test SuitesaboutUnlogged Tables
context (empty) Advocates using unlogged tables in tests.
relation (empty) about
source_node_id (empty) a16f51f2-507b-4792-9b85-e2fba9b544b4
target_node_id (empty) a359976f-78df-4c42-a467-8acfaf9750cd
create Rails Tests Are Mostly Integration Testsfrom_talkFantastic Databases and Where to Find Them
context (empty) Opening framing argument.
relation (empty) from_talk
source_node_id (empty) ba4b188a-4de1-4559-b132-f088dddf266f
target_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
create Rails Tests Are Mostly Integration TestsaboutTest Pyramid
context (empty) Claims the pyramid doesn't fit typical Rails apps.
relation (empty) about
source_node_id (empty) ba4b188a-4de1-4559-b132-f088dddf266f
target_node_id (empty) 9a38f930-f660-47aa-9fc4-3debba3c4fd7
create Prefer SQL Window Functions over Ruby Aggregationfrom_talkFantastic Databases and Where to Find Them
context (empty) Core lesson of the window functions section.
relation (empty) from_talk
source_node_id (empty) 22f2cc8f-671b-4d2b-a4e8-0c42d971b387
target_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
create Prefer SQL Window Functions over Ruby AggregationaboutWindow Functions
context (empty) Explicitly about choosing window functions over Ruby-side aggregation.
relation (empty) about
source_node_id (empty) 22f2cc8f-671b-4d2b-a4e8-0c42d971b387
target_node_id (empty) 6e5dfa58-bc10-4462-bced-0e8525568cdd
create Learn to Read EXPLAINfrom_talkFantastic Databases and Where to Find Them
context (empty) Core lesson of the EXPLAIN section.
relation (empty) from_talk
source_node_id (empty) 2a80cbba-0020-4d77-b095-dff898bf7eed
target_node_id (empty) 9807e80c-8d7e-4d86-af24-ede2636846ca
create Learn to Read EXPLAINaboutEXPLAIN / EXPLAIN ANALYZE
context (empty) About learning to read EXPLAIN plans.
relation (empty) about
source_node_id (empty) 2a80cbba-0020-4d77-b095-dff898bf7eed
target_node_id (empty) 5a7670f8-439c-4364-b193-f80d93e82e09

Read set

107 nodes

tool Ruby on Rails search_nodes talk Fantastic Databases and Where to Find Them search_nodes+get_node_edges event Rails World search_nodes talk From PostgreSQL to SQLite in Rails search_nodes talk Building Beautiful UIs with Ruby A Rails-Native Approach search_nodes talk Data Management With Ruby search_nodes talk JRuby: Professional-Grade Ruby search_nodes talk Counterintuitive Rails pt. 1 search_nodes talk Nightmare neighbours caveats of Rails based mutlitenancy search_nodes talk When REST is Not Enough: Implementing Alternative Protocols in Ruby on Rails search_nodes tool PostgreSQL search_nodes tool PgBouncer search_nodes question NoSQL vs Postgres for an event store search_nodes tool MessageDB search_nodes tool Sequel search_nodes concept LATERAL join search_nodes tool SQLite search_nodes talk LATERAL Joins Rails Performance Lightning Talk search_nodes concept Common Table Expression search_nodes event wroclove.rb 2023 search_nodes event wroclove.rb 2022 search_nodes event wroclove.rb 2024 search_nodes event wroclove.rb 2019 search_nodes event wroclove.rb 2025 search_nodes event wroclove.rb 2018 search_nodes event wroclove.rb 2026 search_nodes talk Building LLM powered applications in Ruby search_nodes talk An Introduction to Test Bench search_nodes person Krzysztof Hasiński search_nodes+get_node_edges talk It is not so bad, after all search_nodes person Jan search_nodes tool MySQL search_nodes takeaway MySQL Data Directory in RAM search_nodes concept Database Indexes search_nodes concept Horizontal Sharding search_nodes tool DBM / SDBM / GDBM search_nodes question Cross-tenant aggregation with row-level multi-tenancy search_nodes takeaway Prefer LATERAL over CTE for filtered top-N per group search_nodes question Multi-column indexes scoped by tenant search_nodes takeaway Name Things To Find Their Properties search_nodes tool ChatGPT search_nodes talk Events events events search_nodes tool RealtimeBoard search_nodes project Ruby News search_nodes takeaway Be kind and build useful things search_nodes tool knapsack_pro search_nodes tool Falcor search_nodes tool GraphQL search_nodes resource awesome-ddd search_nodes takeaway Time Travel Superpower search_nodes question How to handle very large event volumes over time? search_nodes takeaway Immutable Database Raises Mistake Cost search_nodes concept Rails Testing Pyramid (Ivan's version) search_nodes tool test-prof search_nodes tool parallel_tests search_nodes tool webpagetest.org search_nodes tool reviewdog search_nodes tool Codecov search_nodes concept CI Matrix Strategy search_nodes project imageflow search_nodes company Transloadit search_nodes tool image_processing gem search_nodes tool libvips search_nodes tool ImageMagick search_nodes concept Direct Upload to Cloud search_nodes tool mini_magick search_nodes resource Ironin blog search_nodes takeaway Buy Faster Hardware search_nodes talk Ever shorter feedback loop search_nodes talk Offline Sandwich Focus Workflow search_nodes tool Release Drafter search_nodes takeaway Sign serverlessforruby.org petition search_nodes resource Rocket Real-Time Benchmark search_nodes concept Flat Query Structure search_nodes concept Projection Function search_nodes concept Function as a Service search_nodes concept Row-Level Security search_nodes takeaway UI Data Is Never Truly Fresh search_nodes concept Append-Only Log search_nodes tool Elasticsearch search_nodes question How do you search across millions of events for top items? search_nodes company SpaceX search_nodes person DHH search_nodes concept Distributed Monolith search_nodes tool Distributed Ruby search_nodes concept Distributed Systems search_nodes concept Database-Level Partitioning search_nodes concept Schema-Level Partitioning search_nodes tool Grafana search_nodes concept RAIL Performance Model search_nodes question Does randomizing structural fields break analytics? search_nodes concept GitHub Self-Hosted Runner search_nodes company OVH search_nodes tool CircleCI search_nodes takeaway Switch on HTTP/2 search_nodes tool GitHub Actions search_nodes company 37signals search_nodes project Basecamp search_nodes project HEY search_nodes tool GitHub Releases search_nodes concept ActiveRecord Encryption search_nodes tool activerecord-multi-tenant search_nodes tool acts_as_tenant search_nodes project granite search_nodes tool Apartment search_nodes tool flag_shih_tzu search_nodes talk Better WebPerformance with Rails search_nodes

9 edges