RocksDB est un magasin de valeurs clés intégré et persistant.
L'introduction suivante vient du site officiel chinois Rocksdb
https://rocksdb.org.cn/
Il a les quatre caractéristiques suivantes
1 High Performance: RocksDB utilise un ensemble de moteurs de base de données de structure de journal. Pour de meilleures performances, ce moteur est écrit en C ++. La clé et la valeur sont des flux d'octets de toute taille.
2 Optimisé pour le stockage rapide: ROCKSDB est spécialement optimisé pour les périphériques de stockage rapide et à faible latence (comme la mémoire flash ou le disque dur à grande vitesse). RocksDB maximisera les performances de lecture et d'écriture à haut débit de la mémoire flash et de la RAM.
3Adapabilité: RocksDB convient à de nombreux types de charges de travail. Des moteurs de stockage de données comme les myrocks à la mise en cache des données d'application, et même certaines charges de travail intégrées, ROCKSDB peut faire calmement à ces différents besoins de charge de travail de données.
4 Opérations de base de données de base et avancées ROCKSDB fournit des opérations de base, telles que l'ouverture et la fermeture de la base de données. Un support de lecture et d'écriture est également fourni pour les opérations avancées telles que la fusion et le filtrage de compression.
Installation et utilisation de RockDB
Il existe plusieurs façons d'installer RocksDB. Étant donné que le fonctionnaire ne fournit pas de bibliothèque binaire pour la plate-forme correspondante, elle doit être compilée et utilisée par elle-même.
L'installation de RocksDB est très simple, mais vous devez changer votre vue sur RocksDB. Ce n'est pas une base de données des poids lourds, c'est un magasin de valeurs de clé intégré. Cela signifie que vous pouvez l'essayer vous-même dans l'environnement de développement en ajoutant simplement des dépendances ROCKSDB à votre projet Maven. Si vous ne comprenez pas cela, vous pouvez accéder aux deux méthodes d'installation non recommandées suivantes.
Une fois que vous avez vérifié le site officiel de RocksDB, vous constaterez que vous devez rédiger un programme C ++ (non recommandé)
#include <ssert> #include "rocksdb / db.h" rocksdb :: db * db; rocksdb :: options options; options.create_if_missing = true; rocksdb :: status status = rocksdb :: db :: open (options, "/ tmp / testdb", & db); assert (status.ok ());
Créer une base de données? ? ? ? Pourquoi est-ce différent du MySQL ou du Mongo que vous avez utilisé auparavant? Pourquoi n'y a-t-il pas un script comme start.sh ou start.bat? Voulez-vous que j'écrive? Après avoir écrit, j'ai trouvé que je ne savais pas comment l'associer à la bibliothèque RocksDB. Ce qu'il faut faire? J'ai oublié C ++.
La méthode 2 utilise PyrocksDB (non recommandée)
http://pyrocksdb.readthedocs.io/en/latest/installation.html
Pour les documents d'installation détaillés, veuillez vous référer aux documents d'installation officiels du site Web de PyrocksDB.
Les deux méthodes ci-dessus sont plus amicales pour les développeurs qui connaissent C ++ ou Python, mais pas très amicaux avec les développeurs Java.
Ensuite, présentons la troisième méthode.
Méthode 3 Utiliser Maven (recommandé)
Créez un nouveau projet Maven et modifiez la dépendance pom.xml pour l'ajouter
<dependency> <proupId> org.rocksdb </prôdId> <Artifactid> rocksdbjni </refactive> <version> 5.8.6 </-version> </Dependency>
Vous pouvez choisir la version que vous aimez.
Ensuite, le niveau de langue de Maven est plus élevé, et je l'ai réglé dans le monde à 1,8 ici
<frofils> <pilaf> <id> jdk18 </id> <cactivation> <cactiveByDefault> true </ ActiveByDefault> <Jdk> 1.8 </jdk> </cactivation> <properties> <maven.comPiler.source> 1.8 </maven.comPiler.source> <maven.compiller.target> 1.8 </maven.compiller.target> <maven.compiller.compillerversion> 1.8 </maven.compiller.compillerversion> </ properties> </pila> </profiles>
À ce stade, l'environnement est prêt. Êtes-vous retourné dans le monde Java familier?
Ensuite, modifiez la configuration en cours dans l'IDE, ajoutez un programme au chemin de stockage de la base de données, puis exécutez le test. Je donnerai ce cours à la fin de l'article.
Il y aura la sortie du journal lors de l'exécution de la console, et un nouveau fichier apparaîtra également dans le fichier.
Nous mettrons à jour plus sur l'API de développement RockDB et ses applications en production plus tard. J'espère que tout le monde y fera attention.
// Copyright (c) 2011-présent, Facebook, Inc. Tous droits réservés.// Ce code source est sous licence à la fois en vertu de la licence GPLV2 (trouvée dans le fichier de licence.apache dans le répertoire racine) .IMPORT ORG.ROCKSDB. java.util.arraylist; import java.util.arrays; import java.util.list; import java.util.map; public class rocksdbsample {static {rocksdb.loadLibrary (); } public static void main (final string [] args) {if (args.length <1) {System.out.println ("usage: rocksdbsample db_path"); System.exit (-1); } chaîne finale db_path = args [0]; chaîne finale db_path_not_found = db_path + "_not_found"; System.out.println ("rocksdbsample"); Try (Final Options Options = New Options (); Final Filter BloomFilter = New BloomFilter (10); Final ReadOptions ReadOptions = New ReadOptions () .SetFillCache (False); Final Statistics Stats = New Statistics (); Final Rateliter Rateliter = New Rateliter (100000000.10000, 10) {Try (final rocksdb db = rochsdb. db_path_not_found)) {assert (false); } catch (final rocksdbexception e) {System.out.format ("a capturé l'exception attendue -% s / n", e); } essayez {options.setCreateIfMissing (true) .SetStatistics (stats) .setWriteBufferSize (8 * sizeUnit.kb) .SetMaxWriteBufferNumber (3) .SetMaxBackgroundCompactions (10) .SetCompressionType (compressionType.Unversal). } catch (final illégalArgumentException e) {assert (false); } affirmer (options.CreateIfMissing () == true); affirmer (options.WriteBuffeSize () == 8 * sizeUnit.kb); affirmer (options.maxwriteBufferNumber () == 3); affirmer (options.maxbackgroundCactions () == 10); assert (options.compressionType () == compressionType.snappy_compression); assert (options.compactionStyle () == compactstyle.universal); affirmer (options.MemTableFactoryName (). equals ("skiplistFactory")); options.setMemTableConfig (new hashskiplistMemTableConfig () .Setheight (4) .setBranchingFactor (4) .setBucketCount (2000000)); affirmer (options.MemTableFactoryName (). Equals ("HashskiPListRepFactory")); options.setMemTableConfig (new HashLinkEdListMemTableConfig () .SetBucketCount (100000)); affirmer (options.MemTableFactoryName (). Equals ("HashLinkEdListRepFactory")); options.setMemTableConfig (new VectorMemTableConfig (). setReservEdSize (10000)); affirmer (options.MemTableFactoryName (). Equals ("VectorRepFactory")); options.setMemTableConfig (new skiplistMemTableConfig ()); affirmer (options.MemTableFactoryName (). equals ("skiplistFactory")); options.setTableFormatConfig (new plaignableConfig ()); // Plain-Table nécessite des options de lecture mmap.SetAllowMmapReads (true); affirmer (options.TableFactoryName (). Equals ("plaintable")); options.SetRatelimiter (Ratelimiter); Final blockbasedTableConfig table_options = new blockbasedTableConfig (); table_options.setBlockCacheSize (64 * sizeUnit.kb) .setFilter (BloomFilter) .SetCachemshardBits (6) .SetCacheSizeDeviation (5) .SetBlockRestarTinterval (10) .SetCacheIndexandFilterBlocks (True) .SethashindexallowCollision (FALS SizeUnit.kb) .setBlockCacheCompressionNumShardBits (10); affirmer (table_options.blockcachesize () == 64 * sizeUnit.kb); affirmer (table_options.cachemshardBits () == 6); affirmer (table_options.blockSizeDeviation () == 5); affirmer (table_options.blockRestarTinterval () == 10); affirmer (table_options.cacheIndexandFilterBlocks () == true); affirmer (table_options.hashindexallowCollision () == false); affirmer (table_options.blockcacheCompressedSize () == 64 * sizeUnit.kb); affirmer (table_options.blockcacheCompressedNumShardBits () == 10); options.setTableFormatConfig (table_options); affirmer (options.TableFactoryName (). Equals ("BlockbasedTable")); try (final rocksdb db = rocksdb.open (options, db_path)) {db.put ("bonjour" .getBytes (), "world" .getBytes ()); Byte final [] Value = db.get ("Hello" .getBytes ()); assert ("world" .equals (nouvelle chaîne (valeur))); String final str = db.getProperty ("rocksdb.stats"); affirmer (str! = null &&! Str.equals ("")); } catch (final rocksdbexception e) {System.out.format ("[error] a attiré l'exception inattendue -% s / n", e); affirmer (false); } try (final rocksdb db = rocksdb.open (options, db_path)) {db.put ("bonjour" .getBytes (), "world" .getBytes ()); Byte [] value = db.get ("bonjour" .getBytes ()); System.out.format ("get ('hello') =% s / n", new String (valeur)); for (int i = 1; i <= 9; ++ i) {for (int j = 1; j <= 9; ++ j) {db.put (string.format ("% dx% d", i, j) .getBytes (), string.format ("% d", i * j) .getBytes ()); }} pour (int i = 1; i <= 9; ++ i) {for (int j = 1; j <= 9; ++ j) {System.out.format ("% s", new String (db.get (string.format ("% dx% d", i, j) .getBytes ()))); } System.out.println (""); } // Écriture de tests de lot (final writeOptions 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 (string.format ("% dx% d", i, j). String.format ("% d", i * j) .getBytes ()); } db.write (writeOpt, lot); }}} pour (int i = 10; i <= 19; ++ i) {for (int j = 10; j <= 19; ++ j) {assert (new String (db.get (string.format ("% dx% d", i, j) .getbytes ())). equals (string.format ("% d", i * j)))); System.out.format ("% S", nouvelle chaîne (db.get (String.Format ("% dx% d", i, j) .getBytes ()))); } System.out.println (""); } value = db.get ("1x1" .getBytes ()); affirmer (valeur! = null); valeur = db.get ("world" .getBytes ()); affirmer (valeur == null); valeur = db.get (readOptions, "world" .getBytes ()); affirmer (valeur == null); octet final [] testKey = "asdf" .getBytes (); octet final [] testvalue = "asdfghjkl; '?> <mnbvcxzqwertyuiop {+ _) (* & ^% $ # @". getBytes (); db.put (testKey, testvalue); byte [] testResult = db.get (testkey); assert (testResult! = null); asserser (arays.equaux (asserver,, testResult! = null); asserser (arays.equals (asserver, testResult! = Null); asserser) (arays.equals (asserver, testResult! = Null); asserser) (Agrays TestResult)); octet [10]; db.get (testKey, suffisant); Rocksdb.not_found); WriteOptions ()) {WriteOpts.SetSync (true); {pour (final tickerType statStype: tickerType.values ()) {if (statStype! = bickerType.Ticker_Enum_Max) {statS.GetTickerCount (statStype); getTtickerCount () "); assert (false); // ne devrait jamais atteindre ici.} essayez {pour (final histogrogype histogrogype: histogramType.values ()) {if (histogrogType! = histogramtype.histogram_enum_max) {histogrogype data = statS.Gethistogramdata (histogtype);}} data = statS.gethistogramdata (histogtype); System.out.println ("Gethistogramme (). (iterator.seekToFirst (); iterator.isvalid (); iterator.next ()) {iterator.statur () ;value ()! System.out.Println ("Itérator SeekToFirst Tests.");} Boolean SeekTolastPassed = false; Null); Null); iterator.prev ()) {keys.add (iterator.key ());}} map <byte [], byte []> db.multiget (clés); DB.Multiget (New ReadOptions (), Keys);Ce qui précède est l'intégralité du contenu de l'installation et de l'application ROCKSDB dans Java présentés cette fois. Si vous ne comprenez toujours rien après l'apprentissage, vous pouvez en discuter dans la zone de message ci-dessous. Merci pour votre soutien à Wulin.com.