none
(Sumber: milis DOTNET) Transfer data per sekian data RRS feed

  • Pertanyaan

  • Sesuai dengan subject email ini yang dimaksud dengan per sekian data adalah, bagaimana caranya melakukan download data yang dari satu database atau tabel ke database atau tabel lain.


    Misalkan, ada server A dan server B. dimana server B akan mengambil 1 juta data dari server A. 
    JIka dilakukan dengan dengan men-download data record per recordnya pastinya lama. untuk mempercepatnya saya ingin men-download data per 1000 record , seperti DTS di SQL server.
    Nah, yang melakukan transfer ini adalah aplikasi buatan sendiri bukan DTS. 
    Pertanyaan saya adalah, apakah memungkinkan kita bisa melakukan download data per 1000 record seperti tersebut diatas. 
    Saya mohon solusi atau contoh bahkan link juga boleh, dari teman-teman sekalian. dimana koneksi database tersebut akan menggunakan 2 teknologi yang berbeda yaitu ADO Classic dan ADO .NET.

    Terima kasih sebelumnya


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Rabu, 25 Juli 2012 07.20
    Moderator

Jawaban

  • Bukan begitu, bos. Maksud pertanyaan saya itu: mau transfer data antar server kok fokusnya di API duluan, bukannya di bagaimana datanya diekspos di source server-nya dulu?

    ADO atau ADO.NET itu kan cuma API untuk koneksi ke database/data server. Kalo koneksi ke database/a server-nya ga dibuka, ya dua2nya ga bisa ngapa2in.

    Jadi sebelum fokus ke API-nya, dilihat dulu data source-nya diekspose sebagai apa. Nah kalo saya lihat ini source data-nya ternyata diekspose oleh database server MySQL. Saya terus terang ga ngeliat ADO (Classic) jadi relevan di sini. Kalo aplikasi yang narik data itu aplikasi desktop .NET, ya cukup API-nya pake ADO.NET aja dulu.

    Jadi arsitektur aplikasinya kurang lebih begini:

    Database Server (Source, MySQL) -> Aplikasi Transfer (.NET, ADO.NET) -> Database Server (Target, MSSQL)

    Sebagai catatan, aplikasi transfer ini diletakkan di target server, sama dengan target database server. Terus aplikasi ini sifatnya pull data dari source server, bukan push data.

    Nah, kalo itu udah OK. Sekarang baru fokusnya itu ke teknik batching supaya datanya bisa ditransfer per sekian number (n) of data (atau page size). Teknik batching ini juga terlalu umum sehingga algoritmanya nanti mesti dikembangkan spesifik tergantung kebutuhan aplikasinya. Prinsipnya begini:

    - Ambil data dari source server setiap n (n = 1000 atau berapapun), pake teknik paging untuk ambil datanya; kalo di MySQL  bisa pake keyword LIMIT di SELECT clause-nya.

    - Data yang diambil dari source server itu tadi di-bulk-insert oleh aplikasi ke target server. Cara bulk insert bisa pake SqlBulkCopy.WriteToServer(IDataReader) seperti di sini: http://msdn.microsoft.com/en-us/library/434atets.

    - Selebihnya tinggal di-loop aja sampe semua data dari source server selesai di-transfer ke target server.

    Ya memang awalnya keliatannya rada ribet, tapi ga juga sebenernya, kan cuma keliatannya.. :D. Terus juga kalo pake cara begini, degree of customizability dan flexibility-nya juga lebih tinggi.

    Silakan dicoba dulu kalo make sense... :D

    Dijawab oleh: Max Raditya


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Rabu, 25 Juli 2012 07.23
    Moderator

Semua Balasan

  • Ini aplikasinya apa? Desktop, web, atau lainnya?

    Udah coba pake teknik batching? Datanya di-batch aja ke dalam 1 paket, terus nanti paketnya dikirim. Packaging-nya di-serialized (formatnya bisa binary, JSON, etc.), bisa dikompresi (kalo pengen package size lebih kecil alias hemat bandwidth), etc.

    Sending/transfering-nya bisa lewat HTTP, TCP, etc. pake WCF, web services, etc.

    Dijawab oleh: Max Raditya


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Rabu, 25 Juli 2012 07.21
    Moderator
  • Desktop Aplikasi.

    Koneksinya pake ADO Classic dan ADO .NET


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Rabu, 25 Juli 2012 07.21
    Moderator
  • Hmm... saya ga ngerti maksdnya ADO Classic dan ADO.NET; ini bukan jenis koneksi di endpoint/kliennya. Koneksi di endpoint-nya itu diekspose sebagai apa? Web server (IIS, etc.), database server (SQL Server, etc.), atau yang lain?

    Dijawab oleh: Max Raditya


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Rabu, 25 Juli 2012 07.22
    Moderator
  • ADO Classic itu jaman sebelum ada .NET, saya biasanya waktu pakenya Visual Basic 6

    ADO .NET yang sekarang ini sudah pasti menggunakan .NET dan menurut saya lebih rumit daripada ADO Classic untuk coding-nya.

    Kembali ke permasalahan,

    Saya melakukan download data dari MySQL ke SQL Server. Kalo saya melakukanya record per record bisa sampai 2 atau 3 jam lebih, karena datanya jutaan record.

    Nah saya ingin download per 1000 record, jadinya bisa memangkas banyak waktu.

    Makanya saya minta solusi dari teman-teman disini,

    Untuk MySQL saya menggunakan koneksi MySQL .NET


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Rabu, 25 Juli 2012 07.22
    Moderator
  • Bukan begitu, bos. Maksud pertanyaan saya itu: mau transfer data antar server kok fokusnya di API duluan, bukannya di bagaimana datanya diekspos di source server-nya dulu?

    ADO atau ADO.NET itu kan cuma API untuk koneksi ke database/data server. Kalo koneksi ke database/a server-nya ga dibuka, ya dua2nya ga bisa ngapa2in.

    Jadi sebelum fokus ke API-nya, dilihat dulu data source-nya diekspose sebagai apa. Nah kalo saya lihat ini source data-nya ternyata diekspose oleh database server MySQL. Saya terus terang ga ngeliat ADO (Classic) jadi relevan di sini. Kalo aplikasi yang narik data itu aplikasi desktop .NET, ya cukup API-nya pake ADO.NET aja dulu.

    Jadi arsitektur aplikasinya kurang lebih begini:

    Database Server (Source, MySQL) -> Aplikasi Transfer (.NET, ADO.NET) -> Database Server (Target, MSSQL)

    Sebagai catatan, aplikasi transfer ini diletakkan di target server, sama dengan target database server. Terus aplikasi ini sifatnya pull data dari source server, bukan push data.

    Nah, kalo itu udah OK. Sekarang baru fokusnya itu ke teknik batching supaya datanya bisa ditransfer per sekian number (n) of data (atau page size). Teknik batching ini juga terlalu umum sehingga algoritmanya nanti mesti dikembangkan spesifik tergantung kebutuhan aplikasinya. Prinsipnya begini:

    - Ambil data dari source server setiap n (n = 1000 atau berapapun), pake teknik paging untuk ambil datanya; kalo di MySQL  bisa pake keyword LIMIT di SELECT clause-nya.

    - Data yang diambil dari source server itu tadi di-bulk-insert oleh aplikasi ke target server. Cara bulk insert bisa pake SqlBulkCopy.WriteToServer(IDataReader) seperti di sini: http://msdn.microsoft.com/en-us/library/434atets.

    - Selebihnya tinggal di-loop aja sampe semua data dari source server selesai di-transfer ke target server.

    Ya memang awalnya keliatannya rada ribet, tapi ga juga sebenernya, kan cuma keliatannya.. :D. Terus juga kalo pake cara begini, degree of customizability dan flexibility-nya juga lebih tinggi.

    Silakan dicoba dulu kalo make sense... :D

    Dijawab oleh: Max Raditya


    Agnes Sannie [MSFT]
    MSDN Community Support | Feedback to us
    Get or Request Code Sample from Microsoft
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    Rabu, 25 Juli 2012 07.23
    Moderator