Mengapa SQL tidak begitu luas di aplikasi desktop besar?

28

Sebagai pengembang perangkat lunak, saya telah mengerjakan proyek mulai dari aplikasi kecil yang dibuat di rumah hingga aplikasi perusahaan berukuran sedang. Di hampir setiap proyek saya menggunakan database atau menyesal memilih untuk tidak menggunakannya sejak awal.

Sekarang, saya bertanya-tanya beberapa hal tentang database dan penggunaannya dalam aplikasi umum:

  • Mengapa Windows itu sendiri tidak menggunakan database SQL "pusat"? Sebagai contoh:
    • Data Pelaporan Kesalahan disimpan dalam banyak file,
    • Pembaruan Windows menyimpan semuanya dalam file datar,
    • Cache ikon disimpan dalam file tunggal yang sangat aneh yang sepertinya tidak dapat diakses melalui SQL, dll.
  • Mengapa begitu banyak aplikasi besar menghindari penggunaan database? Misalnya, bukankah Microsoft Outlook akan mendapatkan dengan menggunakan database nyata alih-alih menciptakan kembali roda dengan memiliki format sendiri untuk file .pst dan menyimpan beberapa data dalam registri?

Jika database menambahkan lapisan tambahan dari kerumitan keseluruhan dan kerugian kinerja yang kecil, ini merupakan harga keuntungan yang sangat besar untuk membuat kode lebih sederhana di sebagian besar keadaan, terutama ketika menyangkut penyimpanan potongan data kecil yang terorganisir daripada biner besar. stream. Jadi mengapa begitu sedikit produk yang menggunakan basis data? Mungkin satu-satunya aplikasi yang saya tahu yang benar-benar menggunakan database Sqlite adalah Firefox, dan mungkin Microsoft Exchange (tapi yang terakhir bukan aplikasi desktop)?

Juga, tidak akan satu set aplikasi, seperti Microsoft Office atau Microsoft Expression, mendapat manfaat dari memiliki database SQL terpadu , membuatnya lebih mudah untuk menyebarkan aplikasi, untuk memperbarui / meningkatkan data, untuk berbagi data antara aplikasi tersebut, untuk membuat cadangan , dll?

Arseni Mourzenko
sumber
4
Bicaralah untuk platform Anda sendiri. ;) Banyak aplikasi Mac / iPhone menggunakan CoreData, yang biasanya menggunakan database SQLite untuk penyimpanan.
mipadi
8
Database juga hanya "banyak file". Saya berpendapat bahwa semua contoh yang Anda sajikan sebenarnya adalah database, tidak hanya database relasional SQL-queryable.
Allon Guralnek
8
Basis data yang dia maksud adalah basis data relasional.
Olivier Jacot-Descombes

Jawaban:

20

1) Secara umum overhead menjalankan RDBMS penuh terlalu besar dan itu akan menambah beban yang tidak perlu ke sistem dan kompleksitas.

Memiliki satu yang diinstal membuat hidup Anda lebih mudah sebagai pengembang tetapi membuat kehidupan pemilik mesin lebih buruk karena mesin mereka cenderung berjalan lebih lambat dan dengan lebih banyak masalah. Dalam konfrontasi pengembang vs pengguna, pengguna harus selalu menang.

2) Banyak penyimpanan data memiliki kebutuhan khusus yang tidak dipenuhi oleh sesuatu seperti SQL Server Express.

Misalnya, log kesalahan harus ditulis ke hal yang paling sederhana untuk memaksimalkan peluang penulisan akan terjadi dan data akan tersedia. SQL Server tidak akan sesederhana itu.

Untuk aplikasi yang lebih kompleks, argumennya cenderung lebih dioptimalkan untuk kasus pengguna yang sangat spesifik - file datar dapat kilat cepat.

Jon Hopkins
sumber
5
Saya tidak berpikir maksudnya jenis database di mana Anda perlu menginstal seluruh server. SQLite berfungsi tanpa server dan tersebar luas dalam aplikasi open source.
laurent
@ Laurent - jika dia tidak lalu mengapa dia menandainya sebagai jawaban yang diterima ketika dia bisa menerima jawaban SQL Lite di bawah ini?
Jon Hopkins
30

Banyak aplikasi menanamkan SQLite . Mengutip dari situs web mereka:

SQLite adalah pustaka perangkat lunak yang mengimplementasikan mesin database SQL transaksional mandiri, tanpa server, nol konfigurasi. SQLite adalah mesin database SQL yang paling banyak digunakan di dunia. Kode sumber untuk SQLite ada di domain publik. "

Anda hanya menggunakan salah satu API yang tersedia, membuat database, tabel, dll dan mesin SQL akan menyimpan semuanya dalam file biner yang dapat Anda tempatkan di mana saja dalam sistem file pengguna. Yang terbaik dari semuanya, ini FLOSS.

Rafael Vega
sumber
23

Windows dikirimkan bersama dan menggunakan mesin basis data bernama Extensible Storage Engine (ESE) .

ESE digunakan oleh Active Directory, Exchange Server, Windows Mail dan Desktop Search di antara banyak layanan dan aplikasi Windows lainnya.

Untuk pengembangan, ada pembungkus ESE open source:

Dengan pengiriman ESE dengan setiap versi modern Windows Anda tidak memiliki masalah penyebaran database. ESE secara arsitektural mengisi peran yang mirip dengan database yang disematkan seperti SQLite.

Ed James
sumber
Mungkin karena kegagalan mempromosikan fitur ini !! ?? Bagaimana mungkin saya telah mengembangkan hampir secara eksklusif dengan teknologi Microsoft sejak tahun 90-an dan saya belum pernah mendengarnya? Kurangnya front-end yang baik mungkin menjadi alasan lain. Dari Wikipedia: "Selama bertahun-tahun, itu adalah API pribadi yang hanya digunakan oleh Microsoft, tetapi sejak itu menjadi API yang diterbitkan yang dapat digunakan siapa saja." Juga: "JET Blue API diterbitkan pada tahun 2005 untuk memfasilitasi penggunaan oleh semakin banyak aplikasi dan layanan baik di dalam maupun di luar Windows."
Mike Mendukung Monica
8

Database relasional bukan struktur data yang paling efisien untuk setiap domain. Banyak aplikasi desktop yang menggunakan database tertanam, Anda tidak bisa dengan mudah mengatakan bahwa mereka melakukannya jika yang Anda lihat hanyalah beberapa file data.

Jeremy
sumber
Itulah intinya: mengapa tidak hanya menggunakan Microsoft SQL Server (Express? Atau lisensi khusus untuk satu server lokal SQL Server yang sudah diinstal pada setiap platform Windows?) Alih-alih database tertanam (bukan SQL?) Atau format biner ekstraterrestrial sendiri seperti Microsoft Outlook ?
Arseni Mourzenko
Karena seperti katanya SQL tidak optimal untuk semuanya. Banyak aplikasi menyimpan data spesifik akan sangat dioptimalkan untuk satu tugas dan sebagai hasilnya akan lebih cepat daripada SQL dengan tapak yang lebih kecil.
Jon Hopkins
3
@ MainMa: Sekarang Anda baru saja menambahkan ketergantungan tambahan: pengguna harus menginstal dan menjalankan SQL Server. Ini tidak sepele. Jika localhost SQL Server khusus sudah diinstal pada semua komputer Windows, mungkin berbeda, tetapi itu tidak terjadi.
David Thornley
SQLServer Compact mudah dipasang: cukup salin beberapa file.
MarkJ
7

Mengapa Windows itu sendiri tidak menggunakan database SQL "pusat"?

Sebenarnya, ide ini telah dikembangkan di Microsoft selama beberapa waktu. Ini disebut WinFS . Ini adalah teknologi yang menarik, dan tersedia untuk pelanggan MSDN. Beberapa hari kemudian, saya akan menginstalnya di VM dan bermain-main dengannya.

Adam Crossland
sumber
2
Saya masih ingat WinFS menjadi "hal besar berikutnya" untuk Windows (pada saat itu) Longhorn, kembali ketika saya masih tahu cara menggunakan PC. :-)
Denis de Bernardy
6

Database menawarkan fleksibilitas dan seperti setiap fitur hampir pasti ada biayanya. Jika flat-file akan berfungsi, maka Anda dapat mengasumsikan tidak ada seorang pun yang perlu melakukan query data dengan cara yang tidak terduga seperti dalam laporan ad hoc.

Basis data juga melakukan pekerjaan yang baik dalam menangani beberapa koneksi / input. Sekali lagi, jika ini bukan persyaratan untuk aplikasi desktop Anda, mengapa menambahkan kompleksitas tambahan? Selain melalui antarmuka pengguna / instalasi Outlook yang sebenarnya, berapa banyak aplikasi atau pengguna lain yang mencoba menulis ke file Outlook di komputer Anda?

Akan lebih mudah jika semua data berada dalam database relasional dari perspektif "Saya ingin dapat meminta semua data dengan cara apa pun yang saya anggap cocok dengan satu bahasa seperti SQL", tetapi ini jarang menjadi prioritas dengan banyak aplikasi.

Sebagian besar programmer akan melihatnya dari:

  • Saya tahu apa yang harus dilakukan aplikasi, ini yang harus dilakukan

  • aplikasi saya adalah satu-satunya entitiy yang akan pernah mengakses dan / atau memanipulasi data ini

  • struktur file sederhana dari desain saya sendiri akan berfungsi

  • untuk setidaknya satu aplikasi saya ingin menghindari mengandalkan kode orang lain dan memiliki kontrol penuh.

JeffO
sumber
1
+1. Anda benar: tidak ada banyak koneksi untuk aplikasi desktop (dalam kebanyakan kasus), yang mengurangi manfaat dari database SQL.
Arseni Mourzenko