Perbandingan Data Historis secara realtime - lebih cepat dalam SQL atau kode?

Saya memiliki persyaratan dalam proyek yang sedang saya kerjakan untuk membandingkan versi terbaru dari sebuah catatan dengan catatan sejarah sebelumnya untuk mendeteksi perubahan.

Saya menggunakan kerangka sinkronisasi data Azure Offline untuk mentransfer data dari perangkat klien ke server yang menyebabkan catatan dalam tabel yang disinkronkan diperbarui berdasarkan perubahan pengguna. Saya kemudian memiliki pemicu yang menyalin setiap pembaruan ke dalam tabel riwayat dan kueri SQL yang berjalan saat membuat daftar perubahan untuk membandingkan catatan saat ini vs riwayat terbaru dengan melakukan perbandingan kolom - terutama string tetapi beberapa nilai integer dan tanggal.

Apakah ini cara paling efisien untuk mencapai hal ini? Apakah akan lebih cepat memuat data ke dalam memori dan melakukan perbandingan berbasis kode dengan aturan?

Selain itu, jika saya terus-menerus menyimpan semua data historis dalam tabel SQL, apakah ini akan memengaruhi kinerja dari waktu ke waktu dan apakah saya akan lebih baik menyimpan data ini di sesuatu seperti Azure Table Storage? Saya juga memikirkan biaya karena penggunaan SQL jauh lebih mahal daripada Penyimpanan Tabel tetapi jelas saya tidak dapat menggunakan pemicu dan harus memasukkan setiap baris yang disinkronkan ke dalam Penyimpanan Tabel secara manual.


person RNDThoughts    schedule 26.01.2016    source sumber
comment
Sudahkah Anda membandingkan kedua pendekatan tersebut untuk melihat mana yang lebih cepat dengan data Anda?   -  person ChrisF    schedule 26.01.2016
comment
Belum, tapi tentu saja itu adalah langkah selanjutnya! Hanya mencari beberapa saran umum.   -  person RNDThoughts    schedule 26.01.2016


Jawaban (2)


Anda dapat menghindari menanyakan dan membandingkan data historis sama sekali, karena versi terbaru sudah ada di tabel utama (dan jika tidak, pasti datanya baru/berubah).

Pertimbangkan tabel utama dengan 50.000 catatan dan 1.000.000 catatan data historis (dan terus bertambah setiap hari).

Daripada memperbarui tabel utama secara langsung dan kemudian menanyakan 1.000.000 catatan (dan mengekstrak catatan terbaru), Anda dapat menanyakan tabel utama yang lebih kecil untuk satu catatan tersebut (mungkin ID), membandingkan bidang, dan hanya jika ada perubahan (atau belum ada data) perbarui bidang tersebut dan tambahkan catatan ke data historis (atau gunakan prosedur pemicu/tersimpan untuk itu).

Dengan begitu Anda bahkan tidak memerlukan database (mungkin berisi banyak indeks) untuk data historis, Anda bahkan dapat menyimpannya dalam file datar jika Anda mau, bergantung pada apa yang ingin Anda lakukan dengan data tersebut.

person Danny_ds    schedule 26.01.2016
comment
Kerangka sinkronisasi yang saya gunakan berkaitan dengan perubahan data aktual, jadi saya hanya mendapatkan catatan riwayat baru ketika ada perubahan aktual. Mengingat sejumlah pembaruan pada sejumlah catatan, saya perlu membandingkan semua perubahan dengan keadaan sebelumnya dan menghasilkan daftar keluaran dari apa yang berubah. - person RNDThoughts; 26.01.2016

Kerangka sinkronisasi yang saya gunakan berkaitan dengan perubahan data aktual, jadi saya hanya mendapatkan catatan riwayat baru ketika ada perubahan aktual. Mengingat sejumlah pembaruan pada sejumlah catatan, saya perlu membandingkan semua perubahan dengan keadaan sebelumnya dan menghasilkan daftar keluaran dari apa yang berubah.

person RNDThoughts    schedule 20.10.2016