KamoCRM

Lapisan data terdistribusi, dipilih dengan sengaja

SQL terdistribusi, kolom lebar, cache, penyimpanan objek dan vektor — masing-masing untuk alasannya sendiri

Lima gudang data yang berbeda, masing-masing menjawab pertanyaan yang lain menjawab buruk: SQL terdistribusi untuk data bisnis transaksional, kolom lebar untuk telemetri high-write, gudang dalam memori untuk keadaan efemer, penyimpanan objek untuk berkas, dan basis data vektor untuk pencarian semantik. Memilih dengan benar adalah sebagian besar rekayasa data, dan hampir selalu dilakukan oleh inersia.

Setiap angka di sini nama dari mana ia berasal dan kapan ia diukur.
UkuranNilaiSumberDiukur
Penyimpanan data yang berbeda dalam produksi5 (YugabyteDB, ScyllaDB, Redis/Valkey, MinIO, Qdrant)kubectl get statefulsets,deployments --all-namespaces
Topologi SQL terdistribusiyb-master and yb-tserver as separate stateful setskubectl get statefulsets -n kamo
Berkas migrasi SQL di bawah kendali versi90find . -name '*.sql' across all service repositories
Migrasi mesin basis data produksi selesai1 (CockroachDB to YugabyteDB, live data)service configuration history; port 26257 retired in favour of 5433

Apa gedung itu mengajarkan kita

Jawaban default untuk ke mana data pergi adalah apa pun proyek terakhir yang digunakan. Itulah bagaimana sebuah bisnis berakhir menjalankan agregasi analitis melawan basis data mengambil pesanan pelanggan, atau menjaga tiga puluh gigabyte file yang diunggah dalam baris tabel. Kami memilih setiap toko melawan beban kerja, dan kami bermigrasi ketika kami salah — platform sebelumnya berjalan pada mesin SQL terdistribusi yang berbeda dan pindah dari itu, yang benar-benar sulit untuk dilakukan dengan data produksi dan lebih berharga sebagai pengalaman daripada jumlah diskusi arsitektur apapun.

SQL terdistribusi bukanlah pengganti drop-in untuk basis data node tunggal, dan caranya berbeda adalah cara yang menggigit. Sebuah transaksi melihat satu snapshot untuk seluruh hidupnya bahkan dalam mode baca-commit, sehingga membaca kedua dari baris di dalam satu transaksi tidak mengamati menulis transaksi lain yang dikommit di antara — kode yang benar pada node tunggal adalah salah di sini. Konflik baca-dan-tulis muncul sebagai kesalahan yang dapat dicoba ulang pada transaksi yang tidak pernah menulis apapun. Ini bukan kasus tepi eksotis; mereka adalah Selasa, dan mereka adalah mengapa kami berhati-hati tentang apa yang kami janjikan pada pekerjaan data.

Penyimpanan objek membawa setiap berkas yang diunggah, dengan deduplikasi berdasarkan isi, dan itu memiliki pelajarannya sendiri: sebuah unggahan yang gagal dapat meninggalkan baris yang kemudian dicoba ulang untuk deduplikasi, menghasilkan berkas yang sistem percaya ada dan tidak dapat dilayani. Kami menemukan itu dalam produksi. Sekarang ini adalah sesuatu yang kami periksa dalam sistem apapun yang kami bangun yang deduplikasi apapun.

Dibangun dengan

  • YugabyteDB
  • ScyllaDB
  • Redis
  • Valkey
  • MinIO
  • Qdrant
  • PostgreSQL wire protocol
  • Hibernate

Apa ini memenuhi syarat kita untuk

Data engineering and migrationMoving data between systems without losing any of itCustom web applicationsThe system your business actually runs on, built properlyPlatform and DevOps engineeringKubernetes, pipelines and the deployment safety nobody notices until it is missing

Katakan pada kami apa yang Anda coba lakukan

Sebuah percakapan singkat biasanya cukup untuk mengatakan apakah kami orang yang tepat. jika kami tidak, kami akan mengatakannya dan menunjukkan tempat yang lebih baik.

Mulai percakapanAku sudah menggunakan KamoCRMBagaimana kita mengutip