Saya seorang Pengembang SQL (bukan DBA atau Arsitek) untuk perusahaan SaaS kecil (~ 50 karyawan). Saya ditugaskan untuk mencari cara:
- Turunkan pelaporan operasional dari 100+ database OLTP kami
- Izinkan laporan tersebut dijalankan terhadap data dari banyak basis data klien
- Posisikan perusahaan kami untuk memberikan lebih banyak solusi berbasis analitik di masa depan
Saya telah membaca sejumlah artikel tentang berbagai teknologi seperti replikasi transaksional (khususnya model pelanggan banyak-ke-satu / pusat), broker layanan SQL, pengiriman log, Change Tracking (CT), dan Change Data Capture (CDC, pemahaman saya adalah ini hanya untuk perusahaan), dan saya tidak yakin jalur apa yang terbaik untuk ditempuh.
Saya berharap beberapa dari Anda dengan keahlian integrasi mungkin menemui pengaturan yang serupa dengan kami dan dapat menunjukkan jalan yang sukses atau mengarahkan saya ke beberapa sumber yang akan membantu.
Karena kendala biaya, solusi kami harus bekerja dalam SQL Server Edisi Standar. Selain itu, solusinya harus masuk akal untuk mendukung / mempertahankan dalam organisasi kecil kami.
Konfigurasi dasar:
Saat ini kami memiliki 100+ basis data klien individu, yang paling banyak digunakan pada server SQL di pusat data kami, tetapi beberapa digunakan pada server klien di dalam pusat data mereka yang dapat kami jelajahi jauh. Ini semua adalah database SQL Server 2008 R2, tetapi kami berencana untuk segera memperbarui ke SQL 2016.
Kami menggunakan proyek basis data dan dacpac untuk memastikan skema ini sama di semua basis data klien yang akan diintegrasikan. Namun, karena kami tidak memaksa semua klien untuk meningkatkan ke versi baru pada saat yang sama, beberapa perbedaan skema mungkin terjadi di antara peningkatan. Solusinya harus cukup fleksibel agar tidak pecah jika klien A menggunakan perangkat lunak versi 1.0 dan klien B ada di versi 1.1.
Laporan operasional saat ini dijalankan langsung dari database OLTP setiap klien. Kami khawatir tentang dampaknya terhadap kinerja aplikasi jika kami tidak membongkarnya.
Persyaratan Tingkat Tinggi:
Klien kami adalah departemen pemrosesan steril di rumah sakit (SPD) yang menginginkan laporan terkini tentang apa yang telah mereka proses sejauh ini, di mana persediaan, dll. Persediaan proses SPD sepanjang waktu, termasuk akhir pekan dan hari libur. Karena salah satu tujuan utama upaya ini adalah untuk mendukung pelaporan operasional dengan lebih baik, kami ingin agar data sedekat mungkin dengan waktu nyata untuk terus memenuhi kebutuhan klien.
Saat ini kami memiliki beberapa SPD dalam database terpisah yang sebenarnya merupakan bagian dari sistem rumah sakit yang sama. Klien-klien ini menginginkan kemampuan untuk melaporkan terhadap semua SPD dalam sistem mereka.
Secara strategis, kami ingin kemampuan untuk dengan mudah mengumpulkan data di semua klien kami untuk mendukung inisiatif analitik internal kami. Harapan kami adalah bahwa kami akan dapat menggunakan data operasional yang dikumpulkan sebagai sumber untuk data mart / gudang.
Pikiran sejauh ini:
Replikasi transaksional sepertinya akan memberikan solusi paling "real-time". Saya menemukan respons ini sangat membantu, tetapi saya khawatir bahwa dengan potensi perbedaan skema, itu tidak akan bekerja untuk kita: SQL Server Banyak-ke-One replikasi
Pengiriman log tidak terdengar ideal mengingat log tidak dapat dipulihkan saat kueri aktif. Saya juga harus mengusir semua orang sehingga log dapat memulihkan atau data akan menjadi basi. Saya tidak jelas apakah metode ini dapat digunakan untuk memusatkan data dari banyak basis data, karena setiap log yang dikirim hanya untuk basis data individual.
Menggunakan pialang layanan SQL, latensi mungkin tidak dapat diprediksi jika antrian tidak dapat mengikuti jumlah pesan yang akan diproses.
CT hanya mengidentifikasi versi untuk setiap baris tabel. Latensi akan bergantung pada seberapa cepat kita dapat memproses sesuatu seperti paket SSIS terhadap setiap basis data untuk mengambil data dan memasukkannya ke dalam repositori pusat.
Apakah kita perlu mempertimbangkan untuk mereplikasi setiap database secara individual dan kemudian mungkin menggunakan semacam teknik virtualisasi data untuk menggabungkan data dari berbagai sumber yang direplikasi?
Setiap saran atau arahan yang Anda bersedia berikan akan sangat dihargai.