When reading data back, it's more efficient to query a single table than to have to join against an extra attributes table
See https://news.ycombinator.com/item?id=6574269 for anecdotal evidence.
See https://news.ycombinator.com/item?id=6574269 for anecdotal evidence.
CREATE TABLE event ( "references" text[], (was 2 tables, references and reference_on_event) "entities" text[], (ditto) "actors" text[], (ditto) "targets" text[], (ditto) "payload" json, (EAV) )
Gin index on all the text arrays. There are about 150k events saved per day and PostgreSQL is running on the same kinds of hardware as SQL Server was. The application is quite read heavy.