Saya bermasalah dalam masalah ini.

Saya memiliki 2 sistem yang terpisah.

Tetapi saya perlu melakukan kueri yang membutuhkan data dari Sistem A untuk meminta beberapa data dari Sistem B.

Dan data dari sistem B perlu di-page (20 record per halaman).

Saya dapat melakukan ini dengan sesuatu seperti mendapatkan 100 catatan pertama di Sistem A kemudian kueri di sistem B dan mungkin dapat mengambil 15 catatan darinya maka saya perlu mengambil 100 catatan lagi di sistem A untuk mengisi halaman 1 sistem B.

Tetapi untuk total halaman saya pikir saya perlu mengulang semua catatan di sistem A untuk melakukan itu.

Saya pikir itu sangat buruk untuk prod ketika saya memiliki jutaan catatan di setiap sistem.

Tolong bantu saya dengan masalah ini.

Terima kasih banyak dan maaf untuk bahasa Inggris saya yang buruk.

0
Duc Anh Pham 31 Mei 2021, 07:20

2 jawaban

Jawaban Terbaik

Jawaban singkat: gunakan tampilan db (dan pertimbangkan tampilan yang terwujud).

Ambil database untuk sistem A, buat dblink di database untuk sistem B, buat tampilan yang menggabungkan dua data ( pertimbangkan juga tampilan yang terwujud ). Jika Anda memiliki tampilan ini, gunakan di sistem A.

Jika Anda tidak dapat membuat dblink, buat etl yang membaca secara berkala (setiap malam ? setiap jam ? tergantung pada kebutuhan Anda ) dari sistem B, simpan dalam tabel di database untuk sistem A dan kemudian buat tampilan di sistem A Anda untuk menggunakan ini data.

Ketika Anda memiliki semua data pada satu sistem, Anda dapat mempertimbangkan beberapa di database memori (seperti Redis, atau serupa ) untuk menyimpan data kunci dan dapat menanyakan "data besar" ini secara efisien.

Pertimbangan yang harus dilakukan sebelum memulai coding:

  • selalu pertimbangkan dulu mengapa Anda melakukan ini dan frekuensi: berapa kali setiap menit, dll.
  • Anda memiliki jutaan data, tetapi bagaimana dengan pertumbuhan data? Berapa banyak data ini akan menjadi dalam satu bulan? Satu tahun? Sepuluh tahun ?
  • jangan lakukan kueri setiap permintaan klien, alih-alih hasil cache jika memungkinkan. Tidak setiap permintaan klien harus memanggil dua basis data dan mempertimbangkan seberapa besar permintaan Anda akan berdampak pada sistem B (dan jika ada beberapa batasan pada sistem ini juga, batas tingkat kapur, dll.)
  • mungkin Anda tidak ingin semua data (seperti semua kolom) melainkan sebagian data. Jangan "bergabung" dengan semuanya, pertimbangkan hanya apa yang benar-benar butuhkan
  • uji dengan data dunia nyata, jangan berhenti di mesin lokal / lingkungan pengujian
  • asumsikan yang terburuk: 10x data, 10x permintaan frekuensi
  • pertimbangkan bagaimana Anda mendokumentasikan semua ini dan bagaimana berbagi pengetahuan ini. Menghubungkan sistem ke sistem lain selalu menjadi masalah dalam arsitektur Anda
1
Vokail 31 Mei 2021, 07:24

Ada beberapa solusi dalam hal desain sistem. Pertama yang dapat saya pikirkan adalah membuat tabel di mana Anda dapat meminta id mengambil ini dari satu database. setelah Anda mendapatkan kueri id pagination ke kedua database. Dalam 3 pertanyaan Anda akan mendapatkan hasil yang diinginkan.

Kedua yang dapat saya pikirkan adalah melakukan sharding berdasarkan id. Saya tidak yakin apa yang Anda gunakan, tetapi jika Anda ingin membuat paginasi sesuatu untuk pengguna. Pastikan Anda menyimpan 1 data pengguna dalam satu database. Dalam hal ini Anda tidak perlu pergi ke database kedua untuk membuat kueri.

0
Karanjot Singh 31 Mei 2021, 05:30