RockSDB adalah toko nilai kunci yang dapat disematkan dan gigih.
Pendahuluan berikut berasal dari situs web resmi Rocksdb Chinese
https://rocksdb.org.cn/
Ini memiliki empat karakteristik berikut
1 Kinerja Tinggi: ROCKSDB menggunakan satu set mesin basis data struktur log. Untuk kinerja yang lebih baik, mesin ini ditulis dalam C ++. Kunci dan nilai adalah aliran byte dengan segala ukuran.
2 Dioptimalkan untuk penyimpanan cepat: ROCKSDB secara khusus dioptimalkan untuk perangkat penyimpanan latensi cepat dan rendah (seperti memori flash atau hard disk berkecepatan tinggi). RockSDB akan memaksimalkan kinerja Read dan Tulis Flash Memory dan RAM.
3Adapability: RockSDB cocok untuk berbagai jenis beban kerja. Dari mesin penyimpanan data seperti myRocks, hingga caching data aplikasi, dan bahkan beberapa beban kerja tertanam, ROCKSDB dapat dengan tenang menghadapi kebutuhan beban kerja data yang berbeda ini.
4 Operasi Database Dasar dan Lanjutan ROCKSDB menyediakan beberapa operasi dasar, seperti membuka dan menutup database. Dukungan baca dan tulis juga disediakan untuk operasi lanjutan seperti penggabungan dan penyaringan kompresi.
Instalasi dan Penggunaan ROCKDB
Ada beberapa cara untuk memasang rocksdb. Karena pejabat tidak menyediakan perpustakaan biner untuk platform yang sesuai, perlu dikompilasi dan digunakan dengan sendirinya.
Instalasi RockSDB sangat sederhana, tetapi Anda perlu mengubah tampilan di RockSDB. Ini bukan database kelas berat, ini adalah toko nilai kunci tertanam. Ini berarti bahwa Anda dapat mencobanya sendiri di lingkungan pengembangan dengan hanya menambahkan dependensi ROCKSDB ke proyek Maven Anda. Jika Anda tidak memahami ini, Anda dapat pergi ke dua metode instalasi berikut yang tidak disarankan.
Setelah Anda memeriksa situs web resmi RockSDB, Anda akan menemukan bahwa Anda perlu menulis program C ++ (tidak disarankan)
#include <sssert> #include "rocksdb/db.h" rocksdb :: db* db; rocksdb :: options option; options.create_if_missing = true; rocksdb :: status status = rocksdb :: db :: option (option, "/tmp/testdb", & db);
Buat database? ? ? ? Mengapa berbeda dari MySQL atau Mongo yang Anda gunakan sebelumnya? Mengapa tidak ada skrip seperti start.sh atau start.bat? Apakah Anda ingin saya menulis? Setelah menulis, saya menemukan bahwa saya tidak tahu cara mengaitkannya dengan perpustakaan RockSDB. Apa yang harus dilakukan? Saya lupa tentang C ++.
Metode 2 menggunakan pyrocksdb (tidak disarankan)
http://pyrocksdb.readthedocs.io/en/latest/installation.html
Untuk dokumen instalasi terperinci, silakan merujuk ke dokumen instalasi situs web resmi PyrocksDB.
Dua metode di atas lebih ramah kepada pengembang yang akrab dengan C ++ atau Python, tetapi tidak terlalu ramah kepada pengembang Java.
Selanjutnya, mari kita perkenalkan metode ketiga.
Metode 3 Gunakan Maven (Direkomendasikan)
Buat Proyek Maven Baru dan ubah ketergantungan Pom.xml untuk menambahkannya
<dependency> <GroupId> org.rocksdb </groupId> <ArTifactId> rocksdbjni </artifactid> <version> 5.8.6 </version> </dependency>
Anda dapat memilih versi yang Anda sukai.
Kemudian, tingkat bahasa Maven lebih tinggi, dan saya mengaturnya secara global menjadi 1,8 di sini
<profiles> <profile> <dr> jdk18 </den> <activation> <activeByDefault> true </activeByDefault> <jdk> 1.8 </jdk> </activation> <props> <maven.compiler.source> 1.8 </maven.compiler.soate> <maven.compiler.target> 1.8 </maven.compiler.target> <maven.compiler.compilerVersion> 1.8 </maven.compiler.compilerVersion> </ Properties> </profile> </profile>
Pada titik ini, lingkungan sudah siap. Sudahkah Anda kembali ke dunia Java yang akrab?
Kemudian, ubah konfigurasi yang berjalan di IDE, tambahkan program ke jalur penyimpanan database, lalu jalankan tes. Saya akan memberikan kelas ini di akhir artikel.
Akan ada output log saat menjalankan konsol, dan file baru juga akan muncul di file.
Kami akan memperbarui lebih banyak tentang API pengembangan ROCKDB dan aplikasinya dalam produksi nanti. Saya berharap semua orang akan memperhatikannya.
// Hak Cipta (C) 2011-Present, Facebook, Inc. Semua Hak Dilindungi.// Kode Sumber ini dilisensikan berdasarkan GPLV2 (ditemukan dalam file // Menyalin di direktori root) dan lisensi APACHE 2.0 // (ditemukan dalam lisensi. java.util.arraylist; import java.util.arrays; import java.util.list; import java.util.map; kelas publik rocksdbsample {static {rocksdb.loadlibrary (); } public static void main (string final [] args) {if (args.length <1) {System.out.println ("Penggunaan: rocksdbsample db_path"); System.exit (-1); } string akhir db_path = args [0]; string akhir db_path_not_found = db_path + "_not_found"; System.out.println ("RocksdBSample"); coba (opsi akhir opsi = opsi baru (); filter akhir bloomfilter = new bloomfilter (10); readoptions final readoptions = readOptions baru () .setFillCache (false); statistik statistik akhir = statistik baru (); ratelimiter ratelimiter = ratelimiter baru (10000000000.10000,); ratelimiter {ratelimiter (100000000000000); ratelimiter (100000000.100, 1000,) {ratelimiter (10000000000); db_path_not_found)) {assert (false); } catch (final rocksdbexception e) {system.out.format ("menangkap pengecualian yang diharapkan - %s/n", e); } coba {options.setCreateIfMissing (true) .setStatistics (stats) .setWriteBufferSize (8 * sizeUnit.kb) .setMaxWriteBufferNumber (3) .setMaxBackgroundCompactions (10) .setCompressionType (compressionType.snappy_scompression. } catch (final ilegalargumentException e) {assert (false); } assert (options.createifmissing () == true); assert (options.writeBufferSize () == 8 * sizeunit.kb); Assert (options.maxwriteBufferMerMer () == 3); Assert (options.maxbackgroundCompactions () == 10); assert (options.compressionType () == compressionType.snappy_compression); assert (option.compaksionStyle () == compactionstyle.universal); Assert (options.memtableFactoryName (). Equals ("SkipListFactory")); options.setMemtableConfig (hashskiplistMemtableConfig baru () .setHeight (4) .setBranchingFactor (4) .setBucketCount (2000000)); assert (options.memtableFactoryName (). Equals ("hashskiplistrepFactory")); options.setMemtableConfig (baru hashlinkedlistMemtableConfig () .setBucketCount (100000)); Assert (options.memtableFactoryName (). Equals ("HashLinkedListrepFactory")); options.setMemtableConfig (vectormemtableConfig baru (). setReservedSize (10000)); assert (options.memtableFactoryName (). Equals ("vectorrepfactory")); options.setMemtableConfig (skiplistMemtableConfig baru ()); Assert (options.memtableFactoryName (). Equals ("SkipListFactory")); options.settableFormatConfig (Plaintableconfig () baru); // Plain-Table membutuhkan opsi baca MMAP.setallowmmapreads (true); Assert (options.tableFactoryName (). Equals ("Plaintable")); option.setratelimiter (ratelimiter); blockbasedTableConfig Table_options = new blockbasedTableConfig (); table_options.setBlockCachesize (64 * sizeunit.kb) .setFilter (Bloomfilter) .setCachenumshardbits (6) .setBlockSizedeviation (5) .setBlockRestArterval (10) .setCacheIndExandFilterBlocks (true) .setHashindExallCallCOnclisionClisionClision (true). * Sizeunit.kb) .setBlockCachecompressedNumShardBits (10); assert (table_options.blockcachesize () == 64 * sizeunit.kb); assert (table_options.cachenumshardbits () == 6); Assert (Table_Options.BlockSizedeviation () == 5); assert (table_options.blockRestArtInterval () == 10); assert (table_options.cacheindexandfilterblocks () == true); Assert (Table_Options.HashIndExallowCollision () == false); assert (table_options.blockCachecompressedSize () == 64 * sizeunit.kb); assert (table_options.blockcachecompressednumshardbits () == 10); options.setTableFormatConfig (Table_Options); Assert (options.tableFactoryName (). Equals ("BlockbasedTable")); coba (rocksdb final db = rocksdb.open (opsi, db_path)) {db.put ("hello" .getbytes (), "world" .getbytes ()); final byte [] value = db.get ("hello" .getbytes ()); assert ("world" .Equals (string baru (nilai))); string final str = db.getProperty ("rocksdb.stats"); assert (str! = null &&! str.equals ("")); } catch (final rocksdbexception e) {System.out.format ("[Kesalahan] menangkap pengecualian yang tidak terduga - %s/n", e); menegaskan (false); } coba (rocksdb final db = rocksdb.open (opsi, db_path)) {db.put ("hello" .getbytes (), "world" .getbytes ()); byte [] value = db.get ("hello" .getbytes ()); System.out.format ("get ('hello') = %s/n", string baru (nilai)); untuk (int i = 1; i <= 9; ++ i) {untuk (int j = 1; j <= 9; ++ j) {db.put (string.format ("%dx%d", i, j) .getbytes (), string.format ("%d", i * j) .getBytes ()); }} untuk (int i = 1; i <= 9; ++ i) {for (int j = 1; j <= 9; ++ j) {System.out.format ("%s", string baru (db.get (string.format ("%dx%d", i, j) .getbytes ()))); } System.out.println (""); } // Tulis Tes Batch Coba (WriteOptions akhir writeOpt = new writeOptions ()) {for (int i = 10; i <= 19; ++ i) {try (final writeBatch batch = new writeBatch ()) {for (int j = 10; j <= 19; ++ j) {Batch.put.put.Format ("% String.format ("%d", i * j) .getbytes ()); } db.write (writeopt, batch); }}} untuk (int i = 10; i <= 19; ++ i) {for (int j = 10; j <= 19; ++ j) {assert (string baru (db.get (string.format ("%dx%d", i, j) .getbytes ())). Equals (string.Format ("%d", i *. System.out.format ("%s", string baru (db.get (string.format ("%dx%d", i, j) .getbytes ()))); } System.out.println (""); } value = db.get ("1x1" .getBytes ()); Assert (nilai! = null); value = db.get ("world" .getbytes ()); Assert (value == null); value = db.get (readOptions, "world" .getbytes ()); Assert (value == null); byte akhir [] testKey = "asdf" .getbytes (); Byte akhir [] testValue = "asdfghjkl; '?> <mnbvcxzqwertyUiop {+_) (*&^%$#@". getBytes (); db.put (testkey, testValue); byte [] testResult = db.get (testkey); (Arrays.Equals (TestValue, TestResult)); String (TestResult)); == rocksdb.not_found); cukup banyak); (WriteOptions Final WritEPTS = New WritingOptions ()) {writtopts.setsync (true); 0, len));} coba {untuk (statstype tickerType terakhir: tickertype.values ()) {if (statstype! = Tickertype.ticker_enum_max) {stats.gettickount ()} {stattick. Dalam Call to getTickerCount () "); assert (false); // tidak boleh mencapai di sini.} coba {untuk (histogramtype akhir histogramtype: histogramtype.values ()) {if (histogramtype! = histogramtype.histogram_enum_max) {histogram) {histograms = histogramspe.histogram_enum_max) {histograms = histogram = histogram = histogram = histogram = histogram = histograma = histograma = histograma. System.outs.println (gethistogramdata () lewat. "); (iterator.seektofirst (); iterator.isvalid (); iterator.next ()) {iterator.status (); System.out.println (tes Iterator Looktofirst lulus. "); null); null); iterator.prev ()) {keys.add (iterator.key ()); db.multiget (readoptions baru (), tombol);Di atas adalah seluruh konten instalasi dan aplikasi ROCKSDB di Java yang diperkenalkan kepada Anda saat ini. Jika Anda masih tidak memahami apa pun setelah belajar, Anda dapat mendiskusikannya di area pesan di bawah ini. Terima kasih atas dukungan Anda untuk wulin.com.