Why the Generalized Data Model Is Not Yet Another Bad CaRMa: Analysis of Four Pitfalls and Measurements on a Live Database
The author compares their generalized data model (a quartet of id, up, t, val) with the failed CRM Vision from the book 'Dreaming in Code,' explaining why their approach does not repeat the mistakes of Bad CaRMa. The model implements a type system, a request controller, and indexes, confirmed by measurements: record collection takes 0.16 ms, and link traversal takes 0.30 ms. A concrete example is also shown: without an index, a query took 4 seconds; after adding one, it took 0.09 ms.
Dalam artikel di Habr, penulis membahas masalah model data generik menggunakan contoh CRM Vision dari buku Scott Rosenberg "Dreaming in Code" (dengan judul Bad CaRMa). Vision menggunakan satu tabel DATA dengan lebih dari 240 kolom tanpa tipe, yang menyebabkan 6-10 self-join untuk pencarian sederhana, degradasi kinerja (50 GB data membutuhkan 250 GB indeks), dan kerugian sebesar 10 juta dolar. Penulis mengklaim bahwa model mereka — kuartet (id, up, t, val) — tidak mengulangi kesalahan tersebut berkat tiga lapisan: sistem tipe (tipe dasar di inti, istilah tipe kustom, hubungan nyata), controller yang secara otomatis menghasilkan SQL dengan WITH RECURSIVE, dan indeks (indeks komposit penutup pada (t, val) dan (up, t)). Dari basis data 133.731 kuartet (168 MB data, 40 MB indeks) di PostgreSQL, pencocokan tepat berdasarkan tipe membutuhkan 0,08 ms, pengumpulan semua atribut record membutuhkan 0,16 ms, dan penelusuran hubungan membutuhkan 0,30 ms. Sebagai kontras, disebutkan kasus di mana kueri ke indeks ANN tanpa menentukan t dan up dieksekusi sebagai Seq Scan selama 4 detik, dan setelah menambahkan indeks parsial menjadi 0,09 ms. Penulis juga menyebut Datomic sebagai contoh EAV yang benar, tetapi mencatat posisinya di ceruk pasar. Kesimpulan: generik bukanlah dosa jika ada sistem tipe, controller, dan indeks nyata yang diverifikasi melalui EXPLAIN.
Sumber: Habr — хаб ИИ —
asli
