RocksDB เป็นร้านค้าคีย์-ค่าถาวร ที่ฝังได้
การแนะนำต่อไปนี้มาจากเว็บไซต์ทางการของจีน Rocksdb
https://rocksdb.org.cn/
มีคุณสมบัติสี่ประการต่อไปนี้
1 ประสิทธิภาพสูง: RockSDB ใช้ชุดของชุดฐานข้อมูลโครงสร้างการบันทึก เพื่อประสิทธิภาพที่ดีขึ้นเครื่องยนต์นี้เขียนใน C ++ คีย์และค่าคือไบต์สตรีมทุกขนาด
2 ที่ได้รับการปรับให้เหมาะสมสำหรับการจัดเก็บอย่างรวดเร็ว: RockSDB ได้รับการปรับให้เหมาะสมเป็นพิเศษสำหรับอุปกรณ์จัดเก็บข้อมูลที่รวดเร็วและต่ำ (เช่นหน่วยความจำแฟลชหรือฮาร์ดดิสก์ความเร็วสูง) RocksDB จะเพิ่มประสิทธิภาพการอ่านและเขียนประสิทธิภาพสูงของหน่วยความจำแฟลชและ RAM
3Adapability: RocksDB เหมาะสำหรับปริมาณงานหลายประเภท จากเครื่องยนต์ที่จัดเก็บข้อมูลเช่น Myrocks ไปจนถึงการแคชข้อมูลแอปพลิเคชันและแม้กระทั่งปริมาณงานที่ฝังอยู่บางส่วน RocksDB สามารถเผชิญกับความต้องการข้อมูลปริมาณงานที่แตกต่างกันเหล่านี้ได้
4 การดำเนินการฐานข้อมูลขั้นพื้นฐานและขั้นสูง RocksDB ให้การดำเนินการพื้นฐานบางอย่างเช่นการเปิดและปิดฐานข้อมูล การสนับสนุนการอ่านและการเขียนยังมีไว้สำหรับการดำเนินงานขั้นสูงเช่นการรวมและการกรองการบีบอัด
การติดตั้งและการใช้งาน RockDB
มีหลายวิธีในการติดตั้ง RocksDB เนื่องจากเจ้าหน้าที่ไม่ได้จัดให้มีห้องสมุดไบนารีสำหรับแพลตฟอร์มที่เกี่ยวข้องจึงจำเป็นต้องรวบรวมและใช้งานด้วยตัวเอง
การติดตั้ง RocksDB นั้นง่ายมาก แต่คุณต้องเปลี่ยนมุมมองของคุณใน RocksDB มันไม่ใช่ฐานข้อมูลเฮฟวี่เวท แต่เป็นร้านค้าคีย์-ค่าฝังตัว ซึ่งหมายความว่าคุณสามารถลองด้วยตัวเองในสภาพแวดล้อมการพัฒนาโดยเพียงเพิ่มการพึ่งพา RocksDB ในโครงการ Maven ของคุณ หากคุณไม่เข้าใจสิ่งนี้คุณอาจไปที่วิธีการติดตั้งสองวิธีต่อไปนี้
เมื่อคุณตรวจสอบเว็บไซต์ทางการของ RocksDB คุณจะพบว่าคุณต้องเขียนโปรแกรม C ++ (ไม่แนะนำ)
#include <assert> #include "Rocksdb/db.h" Rocksdb :: db* db; rocksdb :: ตัวเลือกตัวเลือก; ตัวเลือก; ตัวเลือก;
สร้างฐานข้อมูล? - - - เหตุใดจึงแตกต่างจาก MySQL หรือ Mongo ที่คุณเคยใช้มาก่อน ทำไมไม่มีสคริปต์เช่น start.sh หรือ start.bat? คุณต้องการให้ฉันเขียน? หลังจากเขียนฉันพบว่าฉันไม่รู้วิธีเชื่อมโยงกับห้องสมุด RocksDB จะทำอย่างไร? ฉันลืมเกี่ยวกับ C ++
วิธีที่ 2 ใช้ pyrocksdb (ไม่แนะนำ)
http://pyrocksdb.readthedocs.io/en/latest/installation.html
สำหรับเอกสารการติดตั้งโดยละเอียดโปรดดูเอกสารการติดตั้งเว็บไซต์อย่างเป็นทางการของ PyrockSDB
สองวิธีข้างต้นเป็นมิตรกับนักพัฒนาที่คุ้นเคยกับ C ++ หรือ Python แต่ไม่ค่อยเป็นมิตรกับนักพัฒนา Java
ถัดไปขอแนะนำวิธีที่สาม
วิธีที่ 3 ใช้ maven (แนะนำ)
สร้างโครงการ Maven ใหม่และปรับเปลี่ยนการพึ่งพา POM.XML เพื่อเพิ่ม
<Ederency> <roupId> org.rocksdb </groupId> <ratifactid> rocksdbjni </artifactid> <version> 5.8.6 </version> </derness>
คุณสามารถเลือกเวอร์ชันที่คุณชอบ
จากนั้นระดับภาษาของ Maven จะสูงขึ้นและฉันตั้งไว้ทั่วโลกเป็น 1.8 ที่นี่
<profiles> <profile> <id> jdk18 </id> <การเปิดใช้งาน> <activeByDefault> True </ActiveByDefault> <JDK> 1.8 </jdk> <Maven.Compiler.Target> 1.8 </maven.compiler.target> <Maven.Compiler.CompiLerVersion> 1.8 </maven.compiler.compilerversion> </properties>
ณ จุดนี้สภาพแวดล้อมก็พร้อม คุณกลับสู่โลกชวาที่คุ้นเคยหรือไม่?
จากนั้นแก้ไขการกำหนดค่าการเรียกใช้ใน IDE เพิ่มโปรแกรมไปยังเส้นทางการจัดเก็บข้อมูลฐานข้อมูลจากนั้นเรียกใช้การทดสอบ ฉันจะให้ชั้นเรียนนี้ในตอนท้ายของบทความ
จะมีเอาต์พุตบันทึกเมื่อเรียกใช้คอนโซลและไฟล์ใหม่จะปรากฏในไฟล์
เราจะอัปเดตเพิ่มเติมเกี่ยวกับ RockDB Development API และแอพพลิเคชั่นในการผลิตในภายหลัง ฉันหวังว่าทุกคนจะให้ความสนใจกับมัน
// ลิขสิทธิ์ (c) 2011-present, Facebook, Inc. สงวนลิขสิทธิ์ // ซอร์สโค้ดนี้ได้รับอนุญาตภายใต้ทั้ง GPLV2 (พบใน // การคัดลอกไฟล์ในไดเรกทอรีราก) และ Apache 2.0 สิทธิ์ใช้งาน // java.util.arraylist; นำเข้า java.util.arrays; นำเข้า java.util.list; นำเข้า java.util.map; ชั้นเรียนสาธารณะ Rocksdbsample {คงที่ {rocksdb.loadlibrary (); } โมฆะคงที่สาธารณะหลัก (สตริงสุดท้าย [] args) {ถ้า (args.length <1) {system.out.println ("การใช้งาน: Rocksdbsample db_path"); System.Exit (-1); } สตริงสุดท้าย db_path = args [0]; สตริงสุดท้าย db_path_not_found = db_path + "_not_found"; System.out.println ("Rocksdbsample"); ลอง (ตัวเลือกสุดท้ายตัวเลือก = ตัวเลือกใหม่ () ตัวกรองสุดท้าย BloomFilter = ใหม่ BloomFilter (10); readoptions ขั้นสุดท้าย readoptions = readoptions ใหม่ () .SetFillCache (เท็จ) สถิติสุดท้าย = สถิติใหม่ () RATELIMITER FINAL -RATELIMITER = RATELIMITER ใหม่ db_path_not_found)) {ยืนยัน (เท็จ); } catch (สุดท้าย rocksdbexception e) {system.out.format ("จับข้อยกเว้นที่คาดหวัง - %s/n", e); } ลอง {ตัวเลือก SetCreateFmissing (True) .setStatistics (Stats) .setWriteBuffersize (8 * sizeUnit.kb) .setMaxWriteBuffernumber (3) .SetMaxBackgroundCompactions (10) .SetCompressionType } catch (ขั้นสุดท้าย unlegalargumentException e) {assert (false); } assert (opotions.createifmissing () == true); ยืนยัน (ตัวเลือก WRITEBUFFERSIZE () == 8 * sizeUnit.kb); ยืนยัน (ตัวเลือก MaxWriteBufferNumber () == 3); ยืนยัน (ตัวเลือก maxbackgroundcompactions () == 10); ยืนยัน (opotions.compressionType () == การบีบอัด chressionType.snappy_compression); ยืนยัน (ตัวเลือก compactionstyle () == compactionstyle.universal); ยืนยัน (ตัวเลือก MemtableFactoryName (). Equals ("SkiplistFactory")); ตัวเลือก SetMemTableConfig (ใหม่ HashSkipListMemTableConfig () .Setheight (4) .SetBranchingFactor (4) .SetBucketCount (2000000)); ยืนยัน (ตัวเลือก memtableFactoryName (). Equals ("HashSkipListRepFactory")); ตัวเลือก SetMemTableConfig (ใหม่ HashLinkedListMemTableConfig () .SetBucketCount (100000)); ยืนยัน (ตัวเลือก memtableFactoryName (). Equals ("HashlinkedListrepFactory")); ตัวเลือก SetMemTableConfig (ใหม่ vectormemTableConfig (). setReservedSize (10,000)); ยืนยัน (ตัวเลือก memtableFactoryName (). เท่ากับ ("vectorRepfactory")); ตัวเลือก SetMemTableConfig (ใหม่ SkiplistMemTableConfig ()); ยืนยัน (ตัวเลือก MemtableFactoryName (). Equals ("SkiplistFactory")); ตัวเลือก SettableFormatConfig (ใหม่ plaintableConfig ()); // โต๊ะธรรมดาต้องใช้ตัวเลือกการอ่าน MMAP Setallowmampreads (จริง); ยืนยัน (ตัวเลือก TableFactoryName (). Equals ("Plaintable")); ตัวเลือก SetRateLimiter (Ratelimiter); blockbasedtableConfig table_options สุดท้าย = ใหม่ blockbasedTableConfig (); table_options.setblockcachesize (64 * sizeUnit.kb) .setFilter (BloomFilter) .setCachenumshardbits (6) .setBlockSizedEviation (5) .SetBlockRestartInterval (10) SizeUnit.kb) .setBlockCacheCompressedNumShardbits (10); ยืนยัน (table_options.blockcachesize () == 64 * sizeunit.kb); ยืนยัน (table_options.cachenumshardbits () == 6); ยืนยัน (table_options.blocksizedeviation () == 5); ยืนยัน (table_options.blockrestartinterval () == 10); ยืนยัน (table_options.cacheindexandfilterblocks () == true); ยืนยัน (table_options.hashindexallowcollision () == เท็จ); ยืนยัน (table_options.blockcachecompressedsize () == 64 * sizeunit.kb); ยืนยัน (table_options.blockcachecompressednumshardbits () == 10); ตัวเลือก SettableFormatConfig (table_options); ยืนยัน (ตัวเลือก TableFactoryName (). เท่ากับ ("blockbasedtable")); ลอง (Final Rocksdb db = rocksdb.open (ตัวเลือก, db_path)) {db.put ("สวัสดี" .getBytes (), "World" .getBytes ()); byte สุดท้าย [] value = db.get ("hello" .getBytes ()); ยืนยัน ("World" .Equals (สตริงใหม่ (ค่า))); สตริงสุดท้าย str = db.getProperty ("rocksdb.stats"); ยืนยัน (str! = null &&! str.equals ("")); } catch (สุดท้าย rocksdbexception e) {system.out.format ("[ข้อผิดพลาด] จับข้อยกเว้นที่ไม่คาดคิด - %s/n", e); ยืนยัน (เท็จ); } ลอง (สุดท้าย Rocksdb db = rocksdb.open (ตัวเลือก, db_path)) {db.put ("hello" .getBytes (), "World" .getBytes ()); byte [] value = db.get ("hello" .getBytes ()); System.out.format ("รับ ('hello') = %s/n", สตริงใหม่ (ค่า)); สำหรับ (int i = 1; i <= 9; ++ i) {สำหรับ (int j = 1; j <= 9; ++ j) {db.put (string.format ("%dx%d", i, j) .getBytes (), string.format ("%d", i * j) .getBytes ()); }} สำหรับ (int i = 1; i <= 9; ++ i) {สำหรับ (int j = 1; j <= 9; ++ j) {system.out.format ("%s", สตริงใหม่ (db.get (string.format ("%dx%d", i, j) } system.out.println (""); } // เขียนการทดสอบแบทช์ลอง (การเขียนครั้งสุดท้าย writeOptions writeOpt = new writeOptions ()) {สำหรับ (int i = 10; i <= 19; ++ i) {ลอง (batch batch final batch = new writebatch () {สำหรับ (int j = 10; j <= 19; ++ j) {batch.put string.format ("%d", i * j) .getBytes ()); } db.write (writeopt, batch); }}} สำหรับ (int i = 10; i <= 19; ++ i) {สำหรับ (int j = 10; j <= 19; ++ j) {assert (สตริงใหม่ (db.get (string.format ("%dx%d", i, j) .getBytes ())) System.out.format ("%s", สตริงใหม่ (db.get (string.format ("%dx%d", i, j) .getBytes ()))); } system.out.println (""); } value = db.get ("1x1" .getBytes ()); ยืนยัน (ค่า! = null); ค่า = db.get ("โลก" .getBytes ()); ยืนยัน (value == null); value = db.get (readoptions, "World" .getBytes ()); ยืนยัน (value == null); ไบต์สุดท้าย [] testKey = "asdf" .getBytes (); ไบต์สุดท้าย [] testValue = "asdfghjkl; '?> <mnbvcxzqqwertyuiop {+_) (*&^%$#@". getBytes (); db.put (testKey, testValue); byte [] testResult = db.get (arrays.equals (testvalue, testresult)); สตริง (testresult)); == Rocksdb.not_found); Actensarray); WriteOptions WriteOpts = New WriteOptions ()) {writeopts.setsync (จริง); len)));} ลอง {สำหรับ (tickertype final statstype: tickertype.values ()) {ถ้า (statstype! = tickertype.ticker_enum_max) {stats.gettickercount System.out.println ("ล้มเหลวในการเรียกร้องให้ getTickerCount ()"); stats.gethistogramdata (ฮิสโตแกรมติเป้); db.newiterator ()) {boolean seektofirstassed = false; ถ้า SeekTofirstPassed) {System.out.println ("การทดสอบ iterator seektofirst ผ่านไป"); (iterator.value ()! = null); (iterator.value ()! = null); iterator.isvalid (); } ค่า = db.multiget (ใหม่ readoptions (), คีย์);ข้างต้นเป็นเนื้อหาทั้งหมดของการติดตั้งและแอปพลิเคชัน RocksDB ใน Java ที่แนะนำให้คุณรู้จักในครั้งนี้ หากคุณยังไม่เข้าใจอะไรหลังจากเรียนรู้คุณสามารถพูดคุยในพื้นที่ข้อความด้านล่าง ขอบคุณสำหรับการสนับสนุน Wulin.com