Tampaknya dalam bahasa kueri populer untuk basis data relasional, dimungkinkan untuk membuat kueri yang akan membutuhkan banyak sumber daya untuk menjawab. Dalam praktiknya, admin basis data mengelola ini dengan membatasi jumlah memori per kueri , dan memeriksa kueri yang telah berjalan lama jika ada perlambatan dalam database. Ini sepertinya agak ad-hoc, apakah ada solusi TCS untuk ini?
Apakah ada bahasa permintaan yang hanya dapat mengimplementasikan permintaan efisien?
Jika tidak ada bahasa seperti itu, apakah ada alasan teoretis untuk ini?
Beberapa alasan mengapa saya mengharapkan hal-hal semacam ini ada atau setidaknya masuk akal:
- kami memiliki bahasa pemrograman yang secara khusus dirancang untuk hanya menerapkan perhitungan efisien (biasanya dengan memiliki beberapa logika restriktif dalam sistem tipenya)
- bahasa query populer (seperti SQL) sudah terinspirasi oleh logika, sehingga tidak tampak sebagai peregangan bagi pengguna database untuk mempertimbangkan logika yang lebih ketat.
- pengguna basis data yang tidak jahat sudah mencoba menyiapkan kueri yang dieksekusi dengan cepat, jadi kita harus berharap bahasa query yang lebih ketat ini hanya menghambat pengguna jahat.
Pertanyaan ini terinspirasi oleh persimpangan dua pertanyaan sebelumnya:
cc.complexity-theory
pl.programming-languages
db.databases
finite-model-theory
Artem Kaznatcheev
sumber
sumber
Jawaban:
Salah satu cara melihat bahasa query database adalah melalui lensa database deduktif , di mana query direpresentasikan sebagai program logika. Dalam pengaturan ini, pekerjaan paling relevan yang terkait dengan pertanyaan Anda adalah McAllester Pada analisis kompleksitas analisis statis , yang mengamati bahwa Anda dapat mempertimbangkan tentang waktu menjalankan kueri dengan alasan tentang jumlah "pemecatan awalan" dalam aturan Anda program. Apa "awalan menembak" itu tidak terlalu rumit, tapi saya akan merujuk Anda ke kertas untuk itu.
Dalam dunia pemrograman fungsional, hal semacam ini disebut semantik biaya : itu tidak berarti Anda hanya dapat mengimplementasikan kueri (program) yang efisien, tetapi itu berarti bahwa Anda dapat mempertimbangkan kompleksitas asimtotik dari program deklaratif Anda dengan cara yang masuk akal .
Beberapa kemudian bekerja pada implementasi ide-ide McAllester termasuk Dari aturan datalog ke program yang efisien dengan jaminan waktu dan ruang (Liu dan Stoller) dan Dedalus: Datalog dalam Waktu dan Ruang (Alvaro, Marczak, Conway, Hellerstein, Maier, dan Sears). Saya akui saya belum membaca yang terakhir dari kedua makalah itu.
sumber