zorba-xquery – Dalam makalah ini, kami menjelaskan pendekatan untuk meningkatkan kinerja mesin XQuery dengan mengidentifikasi dan memanfaatkan peluang untuk berbagi pemrosesan baik di dalam maupun di seluruh kueri XML. Kami pertama-tama menjelaskan di mana peluang berbagi muncul di dunia pemrosesan kueri XML.
Penerapan Memoisasi Pada Prosesor Aquery Streaming – Kami kemudian menjelaskan pendekatan untuk pemrosesan XQuery bersama berdasarkan memoisasi, memberikan detail implementasi yang kami bangun dengan memperluas prosesor streaming XQuery yang digabungkan dengan BEA Systems sebagai bagian dari produk BEA WebLogic Integration 8.1 mereka. Untuk mengeksplorasi potensi keuntungan kinerja yang ditawarkan oleh pendekatan kami, kami menyajikan hasil dari studi eksperimental kinerjanya melalui kumpulan beban kerja kueri sintetis yang terinspirasi kasus penggunaan. Hasil kinerja menunjukkan bahwa keuntungan keseluruhan yang signifikan memang tersedia.
Penerapan Memoisasi Pada Prosesor Aquery Streaming
XQuery , meskipun belum menjadi standar, sudah digunakan untuk produk infrastruktur perangkat lunak komersial saya untuk sejumlah tujuan TI yang berbeda. Misalnya, bahasa XQuery (dan sub-bahasa XPath) telah dimasukkan ke dalam beberapa produk untuk manajemen proses bisnis dan integrasi aplikasi. XQuery digunakan dalam beberapa cara di sana – sebagai bahasa transformasi untuk mendefinisikan transformasi data XML, sebagai bahasa ekspresi untuk membuat keputusan percabangan dan perulangan berdasarkan variabel alur kerja XML, dan sebagai bahasa pemfilteran dan perutean untuk menangani peristiwa perantara pesan. XQuery juga digunakan dalam produk integrasi informasi perusahaan yang menyediakan tampilan XML virtual dari sumber data perusahaan yang berbeda yang merupakan bahasa untuk mendefinisikan tampilan terintegrasi dan menulis kueri.
Saat adopsi XQuery mendapatkan momentum, kinerja pemrosesan XQuery menjadi semakin penting. Seperti halnya bahasa kueri apa pun, XQuery dapat menerima sejumlah besar pengoptimalan, baik pada waktu kompilasi maupun saat runtime. Dalam banyak penggunaan XQuery, peluang pengoptimalan yang signifikan dapat diperoleh melalui penemuan dan eksploitasi pemrosesan bersama, di dalam atau di seluruh kueri. Misalnya, dalam publikasi/langganan, pekerjaan evaluasi kueri dapat dibagikan saat mencocokkan pesan dengan sejumlah besar langganan.
Dalam makalah ini, kami menyelidiki eksploitasi peluang berbagi tersebut untuk meningkatkan kinerja pemrosesan XQuery. Secara khusus, kami mengembangkan teknik memoisasi untuk XQuery dan menerapkannya dalam konteks prosesor XQuery streaming komersial. Berbagi dalam pemrosesan XQuery. Secara intuitif, hasil antara pemrosesan XQuery dapat dibagikan kapan pun ekspresi XQuery “sama” akan dievaluasi lebih dari sekali dengan binding variabel XQuery “sama”. (Kami akan mengatakan lebih banyak tentang apa arti “sama” dalam konteks ini di Bagian 2.) Hal ini dapat terjadi dalam beberapa cara:
1. Ekspresi yang sama dapat muncul beberapa kali di lokasi berbeda dalam kueri.
2. Ekspresi yang sama dapat muncul dalam kueri berbeda yang dievaluasi bersama.
3. Ekspresi dapat terjadi dalam kueri yang dievaluasi beberapa kali (kemungkinan besar dengan ikatan variabel yang berbeda).
4. Ekspresi dapat muncul dalam kueri berbeda yang dijalankan pada waktu berbeda (dengan konteks kueri yang sama di seluruh eksekusi).
Kasus pertama cukup jelas. Kasus kedua muncul dalam konteks seperti terbitkan/berlangganan, di mana pesan XML yang masuk perlu diperiksa terhadap banyak kueri berlangganan. Contoh kasus ketiga dan keempat adalah panggilan layanan web atau pencarian basis data jarak jauh yang dimodelkan sebagai panggilan fungsi XQuery, di mana hasil panggilan diketahui stabil dari waktu ke waktu (setidaknya untuk jangka waktu tertentu). Dalam karya ini, kami mengusulkan pendekatan berbasis memoisasi untuk menghindari pekerjaan yang berlebihan. Memoisasi menyimpan hasil untuk ekspresi berdasarkan pengikatan variabelnya, dan dengan demikian dapat mendukung penggunaan kembali evaluasi dalam semua kasus di atas.
Baca Juga : Mengapa menyimpan data XML dalam database SQL Server?
Streaming pemrosesan XQuery. Pendekatan kami dirancang untuk bekerja dengan baik dalam konteks prosesor kueri XML yang menggunakan pemrosesan berbasis aliran. Dalam konteks pemrosesan kueri XML, streaming penting untuk kinerja, dan itu dapat terjadi pada tingkat perincian yang bagus. Pendekatan berbutir halus sangat penting mengingat bahwa satu item XML dapat berukuran besar secara sewenang-wenang, berisi konten data yang setara dengan seluruh tabel atau bahkan database. Untuk mengaktifkan streaming berbutir halus, mesin BEA XQuery , mesin yang menjadi dasar pekerjaan ini, mewakili operan XML-nya sebagai urutan token (yang berpotensi bersarang) yang mewakili potongan data konstituen yang lebih kecil.
Penggunaan representasi aliran token XML menyediakan prosesor XQuery dengan beberapa cara untuk mencapai evaluasi kueri tambahan sambil menghindari materialisasi inputnya. Cara pertama adalah pipelining. Ekspresi XQuery yang diberikan dapat menggunakan dan menghasilkan aliran token secara bertahap, hanya mewujudkan satu atau beberapa token pada satu waktu untuk menghitung dan memancarkan outputnya. Tentu saja, ini membutuhkan penggunaan API berbasis tarikan agar benar-benar efektif. Cara kedua adalah lazy evaluation, teknik yang biasa digunakan dalam implementasi bahasa pemrograman fungsional. Dengan teknik ini, hasil tidak benar-benar dihasilkan sampai diminta oleh ekspresi konsumsi. Selain itu, di XQuery, beberapa ekspresi dapat dievaluasi hanya berdasarkan beberapa token pertama dari input yang diberikan – misalnya, nth(), empty(), existing(), komparator eksistensial, dan predikat posisional. Ekspresi ini memungkinkan mode yang lebih malas untuk pemrosesan XQuery, di mana hanya token yang (mungkin sedikit) yang diperlukan untuk ekspresi konsumsi yang dihasilkan.
Kontribusi. Dalam makalah ini, kami menyajikan pendekatan berbasis memoisasi untuk berbagi dalam pemrosesan XQuery. Sementara masalah pemrosesan kueri ganda (MQP) dan penggunaan memoisasi untuk pemrosesan kueri telah dieksplorasi dalam konteks lain, kontribusi kami terletak pada kenyataan bahwa pemrosesan kueri XQuery bersama dalam lingkungan streaming menambahkan kerutan baru yang signifikan pada masalah. Secara khusus, MQP dalam pengaturan relasional telah berfokus pada konstruksi gaya SELECT FROM-WHERE, sedangkan pekerjaan kami ditujukan untuk mendukung berbagi untuk bahasa XQuery yang jauh lebih kaya. Memoisasi telah dieksploitasi untuk fungsi yang mahal (seperti dalam pemrosesan kueri) atau fungsi yang dihitung berulang kali (seperti dalam pemrograman dinamis), tetapi belum dipelajari untuk berbagai macam ekspresi XQuery dan dalam lingkungan pemrosesan berbasis aliran. Kontribusi utama dari karya ini dapat diringkas sebagai berikut:
1. Kami menetapkan cakupan untuk memoisasi XQuery, pertama dengan cara yang sederhana namun terbatas, dan kemudian dalam rentang yang diperluas dengan memanfaatkan data semantik dan kesetaraan ekspresi.
2. Kami mengembangkan sejumlah teknik kompilasi kueri untuk mengidentifikasi ekspresi XQuery yang dapat dibagikan dan untuk menentukan rincian memoisasi.
3. Kami juga memperluas sistem runtime, menyelesaikan ketegangan yang melekat antara pemrosesan berbasis aliran dan memoisasi. Solusi kami memungkinkan penggunaan kembali komputasi sambil mendukung pipelining dan menghindari evaluasi yang bersemangat.
4. Kami merangkum hasil dari studi kinerja teknik kami dalam konteks mesin BEA XQuery. Hasilnya menunjukkan peningkatan kinerja yang signifikan untuk kasus penggunaan khas XQuery.
5. Karena makalah ini mewakili pendekatan awal kami untuk menambahkan memoisasi ke pemrosesan XQuery, kami mengidentifikasi beberapa masalah terbuka yang penting untuk ditangani.