Bagikan melalui


Pelaporan lintas penyewa menggunakan kueri terdistribusi

Berlaku untuk: Azure SQL Database

Dalam tutorial ini, Anda menjalankan kueri terdistribusi di seluruh set database penyewa untuk pelaporan. Kueri ini dapat mengekstrak wawasan yang terkubur dalam data operasional sehari-hari dari Wingtip Tickets SaaS penyewa. Untuk melakukan ekstraksi ini, Anda menerapkan database analitik tambahan ke server katalog dan menggunakan Kueri Elastis untuk mengaktifkan kueri terdistribusi.

Dalam tutorial ini, Anda akan mempelajari:

  • Cara menerapkan database pelaporan
  • Cara menjalankan kueri terdistribusi di semua database penyewa
  • Bagaimana tampilan global di setiap database dapat mengaktifkan kueri yang efisien di seluruh penyewa

Untuk menyelesaikan tutorial ini, pastikan prasyarat berikut ini diselesaikan:

Pola pelaporan lintas penyewa

pola kueri terdistribusi lintas penyewa

Salah satu kesempatan aplikasi SaaS adalah menggunakan sejumlah besar data penyewa yang disimpan di cloud untuk mendapatkan wawasan tentang operasi dan penggunaan aplikasi Anda. Wawasan ini dapat memandu pengembangan fitur, peningkatan kegunaan, dan investasi lainnya dalam aplikasi dan layanan Anda.

Mengakses data ini dalam database multi-penyewa tunggal dapat dilakukan dengan mudah, tetapi menjadi tidak begitu mudah ketika didistribusikan dalam skala besar di ribuan database yang berpotensi. Salah satu pendekatannya adalah menggunakan Elastic Query, yang memungkinkan pengiriman kueri di seluruh set database terdistribusi dengan skema umum. Database ini dapat didistribusikan di berbagai grup sumber daya dan langganan, tetapi perlu berbagi login yang sama. Kueri Elastis menggunakan satu database utama tempat tabel eksternal ditentukan yang mencerminkan tabel atau tampilan dalam database (penyewa) terdistribusi. Kueri yang dikirimkan ke database utama ini dikompilasi untuk menghasilkan rencana kueri terdistribusi, dengan sejumlah bagian kueri didorong ke database penyewa sesuai kebutuhan. Elastic Query menggunakan peta pecahan dalam database katalog untuk menentukan lokasi semua database penyewa. Penyiapan dan kueri database utama sangat mudah dilakukan menggunakan Transact-SQL standar, dan mendukung kueri dari alat seperti Power BI dan Excel.

Dengan mendistribusikan kueri di seluruh database penyewa, Kueri Elastis memberikan wawasan seketika tentang data produksi langsung. Namun, karena Kueri Elastis menarik data dari database yang berpotensi banyak, latensi kueri terkadang bisa lebih tinggi dibandingkan kueri setara yang dikirimkan ke database multi-penyewa tunggal. Desain kueri untuk meminimalkan data yang dikembalikan ke database utama. Elastic Query biasanya paling cocok untuk meminta sejumlah kecil data aktual, dibandingkan dengan membuat kueri atau laporan analitik yang sering digunakan atau kompleks. Jika kueri tidak berjalan dengan baik, lihat rencana eksekusi untuk melihat bagian kueri apa yang didorong ke database jarak jauh dan berapa banyak data yang dikembalikan. Kueri yang memerlukan agregasi kompleks atau pemrosesan analitis mungkin lebih baik dihandel dengan mengekstrak data penyewa ke dalam database atau gudang data yang dioptimalkan untuk kueri analitik. Pola ini dijelaskan dalam tutorial analitik penyewa.

Dapatkan skrip aplikasi Database Wingtip Tickets SaaS Per Penyewa

Skrip Database Wingtip Tickets SaaS Per Penyewa dan kode sumber aplikasi tersedia di repositori GitHub WingtipTicketsSaaS-DbPerTenant. Lihat panduan umum untuk langkah-langkah mengunduh dan membuka blokir skrip Wingtip Ticket SaaS.

Membuat data penjualan tiket

Untuk menjalankan kueri terhadap set data yang lebih menarik, buat data penjualan tiket dengan menjalankan generator tiket.

  1. Di PowerShell ISE, buka skrip ...\Learning Modules\Operational Analytics\Adhoc Reporting\Demo-AdhocReporting.ps1 dan atur nilai berikut:
    • $DemoScenario = 1, Beli tiket untuk aktivitas di semua tempat.
  2. Tekan F5 untuk menjalankan skrip dan menghasilkan penjualan tiket. Saat skrip berjalan, lanjutkan langkah dalam tutorial ini. Data tiket dikueri di bagian Jalankan kueri ad hoc terdistribusi, jadi tunggulah hingga generator tiket selesai.

Jelajahi tampilan global

Dalam aplikasi Database Wingtip Tickets SaaS Per Penyewa, setiap penyewa diberikan database. Dengan demikian, data yang terkandung dalam tabel database tercakup dalam perspektif penyewa tunggal. Namun, saat mengkueri semua database, penting bahwa Kueri Elastis dapat memperlakukan data seolah-olah itu adalah bagian dari database logis tunggal yang di-shard oleh penyewa.

Untuk mensimulasikan pola ini, satu set tampilan 'global' ditambahkan ke database penyewa yang memproyeksikan ID penyewa ke dalam setiap tabel yang dikueri secara global. Misalnya, tampilan VenueEvents menambahkan VenueId komputasi ke kolom yang diproyeksikan dari tabel Aktivitas. Demikian pula, tampilan VenueTicketPurchases dan VenueTickets menambahkan kolom VenueId komputasi yang diproyeksikan dari tabel masing-masing. Tampilan ini digunakan oleh Kueri Elastis untuk mejajarkan kueri dan mendorongnya ke database penyewa jarak jauh yang sesuai saat kolom VenueId ada. Tampilan ini secara dramatis mengurangi jumlah data yang dikembalikan dan menghasilkan peningkatan performa yang substansial untuk banyak kueri. Tampilan global ini telah dibuat sebelumnya di semua database penyewa.

  1. Buka SSMS dan sambungkan ke server tenants1-<USER>.

  2. Perluas Database, klik kanan contosoconcerthall, dan pilih Kueri Baru.

  3. Jalankan kueri berikut untuk menjelajahi perbedaan antara tabel penyewa tunggal dan tampilan global:

    -- The base Venue table, that has no VenueId associated.
    SELECT * FROM Venue
    
    -- Notice the plural name 'Venues'. This view projects a VenueId column.
    SELECT * FROM Venues
    
    -- The base Events table, which has no VenueId column.
    SELECT * FROM Events
    
    -- This view projects the VenueId retrieved from the Venues table.
    SELECT * FROM VenueEvents
    

Dalam tampilan ini, VenueId dikomputasi sebagai hash dari nama Venue, tetapi pendekatan apa pun dapat digunakan untuk memperkenalkan nilai yang unik. Pendekatan ini mirip dengan cara kunci penyewa dikomputasi untuk digunakan dalam katalog.

Untuk memeriksa definisi Venues lihat:

  1. Di Object Explorer, perluas contosoconcerthall>Views:

    Cuplikan layar memperlihatkan konten simpul Tampilan, termasuk empat jenis Venue d b o.

  2. Klik kanan dbo.Venues.

  3. Pilih Tampilan Skrip sebagai>Buat ke> Jendela Editor Kueri Baru

Skrip salah satu tampilan Venue lainnya untuk melihat bagaimana mereka menambahkan VenueId.

Terapkan database yang digunakan untuk kueri terdistribusi

Latihan ini menerapkan database adhocreporting. Database ini adalah database utama yang berisi skema yang digunakan untuk kueri di semua database penyewa. Database diterapkan ke server katalog yang ada, yaitu server yang digunakan untuk semua database terkait manajemen di aplikasi sampel.

  1. di ISE PowerShell, buka ...\Learning Modules\Operational Analytics\Adhoc Reporting\Demo-AdhocReporting.ps1.

  2. Atur $DemoScenario = 2, Terapkan database pelaporan Ad hoc.

  3. Tekan F5 untuk menjalankan skrip dan membuat database adhocreporting.

Di bagian berikutnya, Anda menambahkan skema ke database sehingga dapat digunakan untuk menjalankan kueri terdistribusi.

Mengonfigurasi database 'utama' untuk menjalankan kueri terdistribusi

Latihan ini menambahkan skema (sumber data eksternal dan definisi tabel eksternal) ke database adhocreporting untuk mengaktifkan kueri di semua database penyewa.

  1. Buka SQL Server Management Studio, dan sambungkan ke database Pelaporan Adhoc yang Anda buat di langkah sebelumnya. Nama database adalah adhocreporting.

  2. Buka ...\Modul Pembelajaran\Analitik Operasional\Pelaporan Adhoc\ Initialize-AdhocReportingDB.sql di SSMS.

  3. Tinjau skrip dan catatan SQL:

    Elastic Query menggunakan kredensial lingkup database untuk mengakses setiap database penyewa. Info ini harus tersedia di semua database dan biasanya harus diberikan hak minimum yang diperlukan untuk mengaktifkan kueri ini.

    buat info masuk

    Dengan menggunakan database katalog sebagai sumber data eksternal, kueri didistribusikan ke semua database yang terdaftar dalam katalog saat kueri dijalankan. Karena setiap penyebaran memiliki nama server yang berbeda, skrip ini mendapatkan lokasi database katalog dari server saat ini (@@servername) tempat skrip dijalankan.

    buat sumber data eksternal

    Tabel eksternal yang mereferensikan tampilan global yang dijelaskan di bagian sebelumnya, dan didefinisikan dengan DISTRIBUSI = SHARDED(VenueId). Karena setiap VenueId memetakan ke database individual, ini meningkatkan performa untuk banyak skenario seperti yang ditunjukkan di bagian berikutnya.

    membuat tabel eksternal

    Tabel lokal VenueTypes yang dibuat dan diisi. Tabel data referensi ini sama di semua database penyewa, sehingga dapat direpresentasikan di sini sebagai tabel lokal dan diisi dengan data umum. Untuk beberapa kueri, memiliki tabel yang didefinisikan dalam database utama ni dapat mengurangi jumlah data yang perlu dipindahkan ke database utama.

    membuat tabel

    Jika Anda menyertakan tabel referensi dengan cara ini, pastikan untuk memperbarui skema tabel dan data setiap kali Anda memperbarui database penyewa.

  4. Tekan F5 untuk menjalankan skrip dan memulai database adhocreporting.

Sekarang Anda dapat menjalankan kueri terdistribusi dan mengumpulkan wawasan dari semua penyewa!

Jalankan kueri terdistribusi

Sekarang setelah database adhocreporting disiapkan, jalankan beberapa kueri terdistribusi. Sertakan rencana eksekusi untuk pemahaman yang lebih baik tentang di mana pemrosesan kueri terjadi.

Saat memeriksa rencana eksekusi, arahkan kursor ke ikon rencana untuk detailnya.

Penting untuk dicatat, adalah bahwa mengatur DISTRIBUSI = SHARDED(VenueId) ketika sumber data eksternal telah didefinisikan meningkatkan performa untuk banyak skenario. Karena setiap VenueId memetakan ke database individual, pemfilteran mudah dilakukan dari jarak jauh, hanya mengembalikan data yang diperlukan.

  1. Buka ...\Learning Modules\Operational Analytics\Adhoc Reporting\Demo-AdhocReportingQueries.sql di SSMS.

  2. Pastikan Anda tersambung ke database adhocreporting.

  3. Pilih menu Kueri dan klik Sertakan Paket Eksekusi Aktual

  4. Sorot kueri Tempat mana yang saat ini terdaftar?, dan tekan F5.

    Kueri menampilkan seluruh daftar tempat, mengilustrasikan seberapa cepat dan mudahnya melakukan kueri di semua penyewa dan menampilkan data dari setiap penyewa.

    Periksa rencana dan lihat bahwa seluruh biaya ada di kueri jarak jauh. Setiap database penyewa menjalankan kueri dari jarak jauh dan mengembalikan informasi tempatnya ke database utama.

    SELECT * FROM dbo.Venues

  5. Pilih kueri berikutnya, dan tekan F5.

    Kueri ini menggabungkan data dari database penyewa dan tabel VenueTypes lokal (disebut lokal karena merupakan tabel dalam database adhocreporting).

    Periksa rencana dan lihat bahwa sebagian besar biaya adalah kueri jarak jauh. Setiap database penyewa mengembalikan info tempatnya dan melakukan penggabungan lokal dengan tabel VenueTypes lokal untuk menampilkan nama yang mudah diingat.

    Bergabung pada data jarak jauh dan lokal

  6. Sekarang pilih kueri Pada hari apa tiket paling banyak terjual?, dan tekan F5.

    Kueri ini melakukan penggabungan dan agregasi yang sedikit lebih kompleks. Sebagian besar pemrosesan terjadi dari jarak jauh. Hanya baris tunggal, yang berisi jumlah penjualan tiket harian setiap tempat per hari, dikembalikan ke database utama.

    pertanyaan

Langkah berikutnya

Dalam tutorial ini, Anda akan mempelajari cara:

  • Menjalankan kueri terdistribusi di semua database penyewa
  • Terapkan database pelaporan dan tentukan skema yang diperlukan untuk menjalankan kueri terdistribusi.

Sekarang, cobalah tutorial Analitik Penyewa untuk mempelajari proses mengekstrak data ke database analitik terpisah untuk pemrosesan analitik yang lebih kompleks.

Sumber Daya Tambahan: