1. Gambaran keseluruhan
Pangkalan data dalam memori bergantung pada memori sistem berbanding dengan ruang cakera untuk penyimpanan data. Kerana akses memori lebih cepat daripada akses cakera, pangkalan data ini secara semula jadi lebih cepat.
Tentu saja, kita hanya dapat menggunakan pangkalan data dalam memori dalam aplikasi dan senario di mana data tidak perlu ditahan atau untuk menjalankan ujian dengan lebih cepat. Mereka sering dijalankan sebagai pangkalan data tertanam, yang bermaksud mereka dibuat ketika proses dimulakan dan dibuang ketika proses berakhir yang sangat selesa untuk diuji kerana anda tidak perlu menyiapkan pangkalan data luaran.
Pada bahagian berikut, kita akan melihat beberapa pangkalan data dalam memori yang paling biasa digunakan untuk lingkungan Java dan konfigurasi yang diperlukan untuk masing-masing .
2. Pangkalan Data H2
H2 adalah pangkalan data sumber terbuka yang ditulis dalam Java yang menyokong SQL standard untuk kedua-dua pangkalan data tertanam dan mandiri. Sangat cepat dan terkandung dalam JAR hanya sekitar 1.5 MB.
2.1. Ketergantungan Maven
Untuk menggunakan pangkalan data H2 dalam aplikasi, kita perlu menambahkan kebergantungan berikut:
com.h2database h2 1.4.194
Versi terkini pangkalan data H2 boleh dimuat turun dari Maven Central.
2.2. Konfigurasi
Untuk menyambung ke pangkalan data dalam memori H2 , kita dapat menggunakan String sambungan dengan mem protokol , diikuti dengan nama pangkalan data. The driverClassName, URL, nama pengguna dan kata laluan hartanah boleh diletakkan di dalam .properties fail untuk dibaca oleh permohonan kami:
driverClassName=org.h2.Driver url=jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1 username=sa password=sa
Sifat-sifat ini memastikan pangkalan data myDb dibuat secara automatik pada permulaan aplikasi.
Secara lalai, apabila sambungan ke pangkalan data ditutup, pangkalan data juga ditutup. Sekiranya kita mahu pangkalan data bertahan selama JVM dijalankan, kita dapat menentukan sifat DB_CLOSE_DELAY = -1
Sekiranya kita menggunakan pangkalan data dengan Hibernate, kita juga perlu menentukan dialek Hibernate:
hibernate.dialect=org.hibernate.dialect.H2Dialect
Pangkalan data H2 dijaga dengan kerap dan memberikan dokumentasi yang lebih terperinci di h2database.com.
3. HSQLDB ( Pangkalan Data HyperSQL )
HSQLDB adalah projek sumber terbuka, juga ditulis dalam Java, mewakili pangkalan data hubungan. Ia mengikuti piawaian SQL dan JDBC dan menyokong ciri SQL seperti prosedur dan pencetus yang tersimpan.
Ini dapat digunakan dalam mode memori, atau dapat dikonfigurasi untuk menggunakan penyimpanan disk.
3.1. Ketergantungan Maven
Untuk mengembangkan aplikasi menggunakan HSQLDB , kami memerlukan ketergantungan Maven:
org.hsqldb hsqldb 2.3.4
Anda boleh mendapatkan versi terbaru HSQLDB di Maven Central.
3.2. Konfigurasi
Sifat sambungan yang kita perlukan mempunyai format berikut:
driverClassName=org.hsqldb.jdbc.JDBCDriver url=jdbc:hsqldb:mem:myDb username=sa password=sa
Ini memastikan bahawa pangkalan data akan dibuat secara automatik pada permulaan, berada dalam memori selama aplikasi, dan dihapus ketika prosesnya berakhir.
Harta dialek Hibernate untuk HSQLDB adalah:
hibernate.dialect=org.hibernate.dialect.HSQLDialect
Fail JAR juga mengandungi Pengurus Pangkalan Data dengan GUI. Maklumat lebih lanjut boleh didapati di laman web hsqldb.org.
4. Pangkalan Data Apache Derby
Apache Derby adalah projek sumber terbuka lain yang mengandungi sistem pengurusan pangkalan data hubungan yang dibuat oleh Apache Software Foundation .
Derby didasarkan pada piawaian SQL dan JDBC dan terutama digunakan sebagai pangkalan data terbenam, tetapi juga dapat dijalankan dalam mod pelayan klien dengan menggunakan kerangka Derby Network Server .
4.1. Ketergantungan Maven
Untuk menggunakan pangkalan data Derby dalam aplikasi, kita perlu menambahkan ketergantungan Maven berikut:
org.apache.derby derby 10.13.1.1
Versi terbaru dari pangkalan data Derby boleh didapati di Maven Central.
4.2. Konfigurasi
Rentetan sambungan menggunakan protokol memori :
driverClassName=org.apache.derby.jdbc.EmbeddedDriver url=jdbc:derby:memory:myDb;create=true username=sa password=sa
Untuk pangkalan data dibuat secara automatik pada permulaan, kita harus menentukan create = true dalam rentetan sambungan. Pangkalan data ditutup dan dijatuhkan secara lalai pada pintu keluar JVM.
Sekiranya menggunakan pangkalan data dengan Hibernate , kita perlu menentukan dialek:
hibernate.dialect=org.hibernate.dialect.DerbyDialect
Anda boleh membaca lebih lanjut mengenai pangkalan data Derby di db.apache.org/derby.
5. Pangkalan Data SQLite
SQLite adalah pangkalan data SQL yang hanya berjalan dalam mod tertanam, baik dalam memori atau disimpan sebagai fail. Ia ditulis dalam bahasa C tetapi juga dapat digunakan dengan Java.
5.1. Ketergantungan Maven
Untuk menggunakan pangkalan data SQLite , kita perlu menambahkan JAR pemacu JDBC:
org.xerial sqlite-jdbc 3.16.1
Ketergantungan sqlite-jdbc boleh dimuat turun dari Maven Central.
5.2. Konfigurasi
Sifat sambungan menggunakan kelas pemacu org.sqlite.JDBC dan protokol memori untuk rentetan sambungan:
driverClassName=org.sqlite.JDBC url=jdbc:sqlite:memory:myDb username=sa password=sa
Ini akan membuat pangkalan data myDb secara automatik jika tidak ada.
Pada masa ini, Hibernate tidak menyediakan dialek untuk SQLite , walaupun kemungkinan akan terjadi di masa depan. Sekiranya anda ingin menggunakan SQLite dengan Hibernate , anda harus membuat kelas HibernateDialect anda .
Untuk mengetahui lebih lanjut mengenai SQLite , pergi ke sqlite.org.
6. Pangkalan Data In-Memory di Spring Boot
Spring Boot menjadikannya sangat mudah untuk menggunakan pangkalan data dalam memori - kerana ia dapat membuat konfigurasi secara automatik untuk H2 , HSQLDB, dan Derby .
Yang perlu kita lakukan untuk menggunakan pangkalan data salah satu daripada tiga jenis Spring Boot adalah menambahkan kebergantungannya ke pom.xml . Apabila kerangka menemui ketergantungan pada classpath, ia akan mengkonfigurasi pangkalan data secara automatik.
7. Kesimpulannya
Dalam artikel ini, kami melihat sekilas pangkalan data dalam memori yang paling sering digunakan di ekosistem Java, bersama dengan konfigurasi dasar mereka. Walaupun ia berguna untuk ujian, ingatlah bahawa dalam banyak kes, mereka tidak menyediakan fungsi yang sama seperti fungsi yang asal.
Anda boleh mendapatkan contoh kod yang digunakan dalam artikel ini di Github.