Topik temu duga representatif

Temu bual kejuruteraan data: mereka bentuk cache untuk paparan pertanyaan berasaskan DAG

DataSukar
Pasukan Editorial Offer.ccDiterbitkan Dikemas kini

Soalan

Sebuah platform analitis mempunyai 500 paparan pertanyaan terwujud yang membentuk DAG kebergantungan sehingga kedalaman 20. Reka bentuk sistem cache dan penyegaran untuk 10,000 pertanyaan sesaat dengan sasaran kesegaran lima minit, kegagalan separa, pengisian semula (backfill), dan paparan hangat.

Soalan dan skop

Setiap paparan ialah pertanyaan ke atas jadual sumber atau paparan lain. Perubahan sumber membatalkan kesahan keturunan (descendants), tetapi mengira semula setiap keturunan dengan serta-merta adalah terlalu mahal. Sistem ini harus menyediakan hasil berversi, mendedahkan tahap kesegaran, dan tidak sekali-kali menggabungkan generasi paparan induk yang tidak serasi. Andaikan kerja penyegaran boleh dilakukan secara tak segerak (asynchronous) dan pembinaan semula penuh kekal tersedia untuk pemulihan.

Perkara yang diuji oleh penemu bual

  • Memodelkan pinggir kebergantungan, versi, pembatalan kesahan, dan susunan penyegaran topologi.
  • Memilih pengiraan semula tokokan (incremental) berbanding pengiraan semula penuh berdasarkan volum perubahan dan bentuk pertanyaan.
  • Mengendalikan hasil lapuk, kegagalan separa, pengisian semula (backfills), kekunci hangat, dan penyingkiran cache.
  • Membuktikan ketepatan dengan keturunan data (lineage), manifes, checksum, dan peristiwa yang boleh dimainkan semula (replayable events).

Soalan penjelasan yang perlu ditanya

Tanya sama ada setiap pertanyaan mempunyai SLO kesegaran, sama ada cantuman (joins) boleh dikekalkan secara tokokan, bagaimana kemas kini dan pemadaman tiba, dan sama ada pembaca lebih suka jawapan lapuk berbanding ralat. Jika sesuatu paparan mengandungi agregat yang tidak boleh dibalikkan (non-invertible aggregates), baris yang diubah mungkin memerlukan pengiraan semula yang lebih luas; jika sesuatu paparan adalah tambah sahaja (append-only), penyegaran delta adalah lebih murah.

Jawapan 30 saat

Saya akan menyimpan manifes berversi untuk setiap paparan: versi kebergantungan, lokasi output, bilangan baris, checksum, dan cap masa kesegaran. Perubahan sumber menambah peristiwa pembatalan kesahan; penjadual mengira keturunan yang terjejas dalam susunan topologi, menggunakan penyegaran delta apabila pertanyaan menyokongnya dan pembinaan semula penuh jika sebaliknya. Terbitkan manifes baharu secara atomik hanya selepas semua induk yang diperlukan sepadan dengan generasi sasaran. Pembaca memilih generasi yang lengkap, boleh menggunakan generasi lapuk yang terhad apabila dasar membenarkannya, dan mendedahkan usianya. Main semula, checksum, dan pembinaan semula penuh berkala membaiki hanyutan (drift).

Perincian langkah demi langkah

1. Mewakili DAG dan generasi

Berikan setiap paparan ID yang stabil, definisi pertanyaan, ID induk, dan generasi. Pelan penyegaran membawa tera air (watermark) sumber sasaran dan merekodkan generasi induk yang telah digunakannya. Tolak penerbitan jika induk berubah semasa pertengahan penyegaran; cuba semula daripada tera air baharu dan bukannya mencampurkan hasil secara senyap.

2. Memilih penyegaran delta atau penuh

Gunakan volum perubahan, bentuk cantuman, dan kebolehbalikan agregat sebagai peraturan keputusan. Penyegaran tokokan membaca hanya sekatan (partitions) atau baris yang berubah apabila enjin dapat membuktikan delta tersebut mencukupi; penyegaran penuh adalah lebih mudah untuk cantuman yang luas atau pemadaman. Kekalkan generasi lama sehingga manifes baharu disahkan, supaya penyegaran yang gagal tidak memadamkan jawapan elok yang terakhir.

3. Menjadualkan pembatalan kesahan dan mengawal paparan hangat

Gabungkan (coalesce) banyak peristiwa sumber ke dalam satu tera air sasaran, kemudian proses nod yang terjejas sekali bagi setiap generasi. Utamakan paparan mengikut permintaan pertanyaan dan hutang kesegaran, tetapi hadkan kerja serentak bagi setiap sumber untuk mengelakkan hulu (upstream) yang hangat daripada menghabiskan sumber pengiraan. Simpan hasil popular dalam cache mengikut parameter paparan dan generasi; batalkan kesahan mengikut generasi dan bukannya memadamkan setiap kekunci secara individu.

4. Memulihkan, mengisi semula, dan membuktikan ketepatan

Kekalkan peristiwa pembatalan kesahan dan manifes penyegaran supaya pekerja boleh menyambung semula selepas ranap. Pengisian semula berjalan di bawah generasi sasaran yang berasingan dan diterbitkan hanya selepas perbandingan dengan generasi semasa. Bandingkan bilangan baris, checksum, agregat sampel, dan tera air keturunan data; beri amaran apabila sesuatu paparan melebihi sasaran kesegaran lima minitnya atau induknya tidak sepadan. Pembinaan semula penuh secara berkala menyediakan orakel untuk mengesan hanyutan tokokan.

Contoh jawapan yang mantap

Saya akan menjelaskan kesegaran mengikut paparan, tingkah laku kemas kini/pemadaman, dan sama ada bacaan lapuk boleh diterima. Setiap paparan mempunyai manifes dengan generasi induk, tera air sumber, lokasi output, checksum, dan kesegaran. Peristiwa pembatalan kesahan disalurkan kepada penjadual yang menggabungkan kerja dan menyegarkan keturunan secara topologi. Gunakan penyegaran delta untuk pertanyaan yang terbukti boleh ditokok, pembinaan semula penuh untuk cantuman yang luas atau pemadaman, dan terbitkan generasi baharu secara atomik. Pembaca tidak sekali-kali mencampurkan generasi; mereka mungkin menerima generasi lapuk yang terhad. Main semula, generasi pengisian semula, checksum, dan pembinaan semula penuh berkala menjadikan ketepatan boleh diuji.

Kesilapan lazim

  • Menyegarkan setiap keturunan serta-merta → lonjakan beban menghasilkan kerja bertindih → gabungkan peristiwa mengikut tera air sasaran.
  • Menimpa satu-satunya hasil secara terus di tempat asal → tugas yang gagal menyebabkan pembaca mendapat data separa → terbitkan generasi tak boleh ubah (immutable) secara atomik.
  • Menganggap setiap agregat adalah tokokan → pemadaman atau fungsi yang tidak boleh dibalikkan menyebabkan hanyutan → gunakan peraturan keputusan berasaskan bentuk pertanyaan dan sandaran pembinaan semula penuh.
  • Menyimpan cache tanpa metadata generasi → jawapan induk dan anak boleh bercanggah → ikat kekunci cache kepada generasi yang lengkap.
  • Membiarkan satu paparan hangat menggunakan semua pekerja → SLO kesegaran lain gagal → gunakan had keserentakan bagi setiap sumber dan setiap paparan.
  • Mempercayai satu bilangan baris sebagai bukti → kerosakan senyap tidak dapat dikesan → bandingkan checksum, sampel, tera air keturunan data, dan pembinaan semula penuh.

Soalan susulan dan respons

Paparan induk disegarkan semasa paparan anak sedang berjalan. Apakah yang berlaku?

Paparan anak merekodkan generasi induk yang dibacanya. Jika generasi tersebut tidak lagi terkini pada masa penerbitan, buang atau cuba semula paparan anak terhadap tera air sasaran yang baharu; jangan sekali-kali menerbitkan generasi yang bercampur.

Pemadaman tiba dalam paparan yang sepatutnya bertokokan. Bolehkah anda masih menggunakan penyegaran delta?

Hanya jika log perubahan dan semantik pertanyaan mengekalkan maklumat yang mencukupi untuk menolak sumbangan lama. Jika tidak, luaskan sekatan yang terjejas atau jadualkan pembinaan semula penuh, dan nyatakan kompromi kesegaran.

Bagaimanakah anda menghalang pengisian semula daripada menggantikan data yang lebih baharu?

Tetapkan generasi dan tera air sumbernya sendiri untuk pengisian semula tersebut. Terbitkan hanya apabila ia merangkumi julat yang diminta dan tidak menggantikan sekatan yang lebih baharu; gabungkan manifes mengikut julat yang jelas dan peraturan generasi.

Bagaimana jika paparan ditanya jauh lebih kerap daripada ia disegarkan?

Sediakan generasi lengkap yang terakhir bersama usianya, utamakannya mengikut hutang kesegaran, dan secara pilihan prira kekunci parameter popular. Jangan sembunyikan kelapukan atau membiarkan permintaan bacaan memintas had keserentakan penyegaran.

Sumber awam

Soalan berkaitan