Example #1
0
 internal static RocksDb OpenRocksDb(
     DbOptions options, string dbPath, ColumnFamilies columnFamilies = null)
 {
     return(columnFamilies is null
         ? RocksDb.Open(options, dbPath)
         : RocksDb.Open(options, dbPath, columnFamilies));
 }
Example #2
0
        public Store(string path)
        {
            var families = new ColumnFamilies();

            for (int x = 0; x <= byte.MaxValue; x++)
            {
                families.Add(new ColumnFamilies.Descriptor(x.ToString(), new ColumnFamilyOptions()));
            }
            db = RocksDb.Open(Options.Default, Path.GetFullPath(path), families);

            ColumnFamilyHandle defaultFamily = db.GetDefaultColumnFamily();

            byte[] value = db.Get(SYS_Version, defaultFamily, Options.ReadDefault);
            if (value != null && Version.TryParse(Encoding.ASCII.GetString(value), out Version version) && version >= Version.Parse("3.0.0"))
            {
                return;
            }

            if (value != null)
            {
                // Clean all families only if the version are different

                Parallel.For(0, byte.MaxValue + 1, (x) => db.DropColumnFamily(x.ToString()));
                _families.Clear();
            }

            // Update version

            db.Put(SYS_Version, Encoding.ASCII.GetBytes(Assembly.GetExecutingAssembly().GetName().Version.ToString()), defaultFamily, Options.WriteDefault);
        }
Example #3
0
        public Store(string path)
        {
            var families = new ColumnFamilies();

            db            = RocksDb.OpenReadOnly(Options.Default, Path.GetFullPath(path), families, false);
            defaultFamily = db.GetDefaultColumnFamily();
        }
Example #4
0
        internal static RocksDbSharp.RocksDb GetDatabase(string databasePath, SliceTransform prefixTransform)
        {
            var columnFamilies = new ColumnFamilies();

            if (File.Exists(databasePath) || Directory.Exists(databasePath))
            {
                var currentColumnFamilies = RocksDbSharp.RocksDb.ListColumnFamilies(new DbOptions(), databasePath);

                foreach (var columnFamily in currentColumnFamilies.ToHashSet())
                {
                    columnFamilies.Add(columnFamily,
                                       new ColumnFamilyOptions()
                                       .SetPrefixExtractor(prefixTransform)
                                       .SetBlockBasedTableFactory(new BlockBasedTableOptions()
                                                                  .SetWholeKeyFiltering(true)
                                                                  .SetIndexType(BlockBasedTableIndexType.Binary)));
                }
            }

            return(RocksDbSharp.RocksDb.Open(new DbOptions()
                                             .SetCreateIfMissing()
                                             .SetCreateMissingColumnFamilies()
                                             .IncreaseParallelism(10),
                                             databasePath,
                                             columnFamilies));
        }
Example #5
0
        static void Main(string[] args)
        {
            var dbOptions      = new DbOptions().SetCreateIfMissing().SetCreateMissingColumnFamilies();
            var columnFamilies = new ColumnFamilies
            {
                { "default", new ColumnFamilyOptions().OptimizeForPointLookup(256) },
                {
                    "user", new ColumnFamilyOptions()
                    .SetMemtableHugePageSize(2 * 1024 * 1024)
                    .SetPrefixExtractor(SliceTransform.CreateFixedPrefix(5))
                    .SetBlockBasedTableFactory(
                        new BlockBasedTableOptions().SetFilterPolicy(BloomFilterPolicy.Create(10, false))
                        .SetWholeKeyFiltering(false))
                }
            };
            var db         = RocksDb.Open(dbOptions, "my.db", columnFamilies);
            var testFamily = db.GetColumnFamily("user");

            db.Put("hello:hi", "hi");
            for (var i = 0; i < 5; i++)
            {
                db.Put($"user:{Guid.NewGuid()}", Guid.NewGuid().ToString(), testFamily);
            }
            using (var it = db.NewIterator(testFamily))
            {
                it.Seek(Encoding.UTF8.GetBytes("user:"******"Done!" + db.Get("hello:hi"));
        }
Example #6
0
 public bool Equals(Table other)
 {
     if (ReferenceEquals(other, null))
     {
         return(false);
     }
     if (ReferenceEquals(other, this))
     {
         return(true);
     }
     if (Name != other.Name)
     {
         return(false);
     }
     if (!object.Equals(CurrentOperation, other.CurrentOperation))
     {
         return(false);
     }
     if (!ColumnFamilies.Equals(other.ColumnFamilies))
     {
         return(false);
     }
     if (Granularity != other.Granularity)
     {
         return(false);
     }
     return(true);
 }
Example #7
0
        public void Start()
        {
            var options = new DbOptions().SetCreateIfMissing()
                          .SetCreateMissingColumnFamilies()
                          .SetMaxBackgroundCompactions(4)
                          .SetMaxBackgroundFlushes(2)
                          .SetBytesPerSync(1024 * 1024);

            var columnFamilies = new ColumnFamilies
            {
                { "Messages", ColumnFamilyOptions() },
                { "Peers", ColumnFamilyOptions() },
                { "Acks", ColumnFamilyOptions() }
            };

            _db = RocksDbSharp.RocksDb.Open(options, _databaseDirectoryPath, columnFamilies);

            _messagesColumnFamily = _db.GetColumnFamily("Messages");
            _peersColumnFamily    = _db.GetColumnFamily("Peers");
            _acksColumnFamily     = _db.GetColumnFamily("Acks");

            ColumnFamilyOptions ColumnFamilyOptions() => new ColumnFamilyOptions().SetCompression(CompressionTypeEnum.rocksdb_no_compression)
            .SetLevelCompactionDynamicLevelBytes(true)
            .SetArenaBlockSize(16 * 1024);

            LoadAllOutOfOrderAcks();
        }
Example #8
0
        static void Main(string[] args)
        {
            string temp = Path.GetTempPath();
            string path = Environment.ExpandEnvironmentVariables(Path.Combine(temp, "rocksdb_cf_example"));

            var options = new DbOptions()
                          .SetCreateIfMissing(true)
                          .SetCreateMissingColumnFamilies(true);

            var columnFamilies = new ColumnFamilies
            {
                { "reverse", new ColumnFamilyOptions() },
            };

            using (var db = RocksDb.Open(options, path, columnFamilies))
            {
                var reverse = db.GetColumnFamily("reverse");

                db.Put("one", "uno");
                db.Put("two", "dos");
                db.Put("three", "tres");

                db.Put("uno", "one", cf: reverse);
                db.Put("dos", "two", cf: reverse);
                db.Put("tres", "three", cf: reverse);
            }

            using (var db = RocksDb.Open(options, path, columnFamilies))
            {
                var reverse = db.GetColumnFamily("reverse");

                string uno = db.Get("one");
                string one = db.Get("uno", cf: reverse);
                string nada;
                nada = db.Get("uno");
                nada = db.Get("one", cf: reverse);
            }

            using (var db = RocksDb.Open(options, path, columnFamilies))
            {
                db.DropColumnFamily("reverse");
                var reverse = db.CreateColumnFamily(new ColumnFamilyOptions(), "reverse");
                var nada    = db.Get("uno", cf: reverse);
                db.Put("red", "rouge", cf: reverse);
            }

            using (var db = RocksDb.Open(options, path, columnFamilies))
            {
                var reverse = db.GetColumnFamily("reverse");
                var nada    = db.Get("uno", cf: reverse);
                var rouge   = db.Get("red", cf: reverse);
            }

            using (var db = RocksDb.OpenReadOnly(options, path, columnFamilies, false))
            {
                string uno = db.Get("one");
            }
        }
Example #9
0
        private static void RocksDb3()
        {
            string directory = @"C:\Users\Peska\source\repos\Esent.Tests\RocksDB";

            var bbto = new BlockBasedTableOptions()
                       .SetFilterPolicy(BloomFilterPolicy.Create(10, false))
                       .SetWholeKeyFiltering(false);

            var options = new DbOptions()
                          .SetCreateIfMissing(true)
                          .SetCreateMissingColumnFamilies(true);

            var columnFamilies = new ColumnFamilies
            {
                { "default", new ColumnFamilyOptions().OptimizeForPointLookup(256) },
                { "test", new ColumnFamilyOptions()
                  //.SetWriteBufferSize(writeBufferSize)
                  //.SetMaxWriteBufferNumber(maxWriteBufferNumber)
                  //.SetMinWriteBufferNumberToMerge(minWriteBufferNumberToMerge)
                  .SetMemtableHugePageSize(2 * 1024 * 1024)
                  .SetPrefixExtractor(SliceTransform.CreateFixedPrefix(8))
                  .SetBlockBasedTableFactory(bbto) },
            };

            using (var db = RocksDbSharp.RocksDb.Open(options, directory, columnFamilies))
            {
                var cf = db.GetColumnFamily("test");

                db.Put("00000000Zero", "", cf: cf);
                db.Put("00000001Red", "", cf: cf);
                db.Put("00000000One", "", cf: cf);
                db.Put("00000000Two", "", cf: cf);
                db.Put("00000000Three", "", cf: cf);
                db.Put("00000001Black", "", cf: cf);
                db.Put("00000002Apple", "", cf: cf);
                db.Put("00000002Cranberry", "", cf: cf);
                db.Put("00000001Green", "", cf: cf);
                db.Put("00000002Banana", "", cf: cf);

                var readOptions = new ReadOptions().SetIterateUpperBound("00000002");

                var iter = db.NewIterator(readOptions: readOptions, cf: cf);
                GC.Collect();
                GC.WaitForPendingFinalizers();

                var b = Encoding.UTF8.GetBytes("00000001");

                iter = iter.Seek(b);

                while (iter.Valid())
                {
                    Console.WriteLine(iter.StringKey());
                    iter = iter.Next();
                }

                Console.ReadKey();
            }
        }
Example #10
0
        private RocksDb OpenRocksDb(
            DbOptions options, string dbName, ColumnFamilies columnFamilies = null)
        {
            var dbPath = Path.Combine(_path, dbName);

            return(columnFamilies is null
                ? RocksDb.Open(options, dbPath)
                : RocksDb.Open(options, dbPath, columnFamilies));
        }
Example #11
0
        private static ColumnFamilies GetColumnFamilies(T[] keys)
        {
            var result = new ColumnFamilies();

            foreach (var key in keys)
            {
                result.Add(key.ToString(), new ColumnFamilyOptions());
            }
            return(result);
        }
Example #12
0
        static void Main(string[] args)
        {
            string temp = Path.GetTempPath();
            string path = Environment.ExpandEnvironmentVariables(Path.Combine(temp, "rocksdb_prefix_example"));
            var    bbto = new BlockBasedTableOptions()
                          .SetFilterPolicy(BloomFilterPolicy.Create(10, false))
                          .SetWholeKeyFiltering(false)
            ;
            var options = new DbOptions()
                          .SetCreateIfMissing(true)
                          .SetCreateMissingColumnFamilies(true)
            ;
            var columnFamilies = new ColumnFamilies
            {
                { "default", new ColumnFamilyOptions().OptimizeForPointLookup(256) },
                { "test", new ColumnFamilyOptions()
                  //.SetWriteBufferSize(writeBufferSize)
                  //.SetMaxWriteBufferNumber(maxWriteBufferNumber)
                  //.SetMinWriteBufferNumberToMerge(minWriteBufferNumberToMerge)
                  .SetMemtableHugePageSize(2 * 1024 * 1024)
                  .SetPrefixExtractor(SliceTransform.CreateFixedPrefix((ulong)8))
                  .SetBlockBasedTableFactory(bbto) },
            };

            using (var db = RocksDb.Open(options, path, columnFamilies))
            {
                var cf = db.GetColumnFamily("test");

                db.Put("00000000Zero", "", cf: cf);
                db.Put("00000000One", "", cf: cf);
                db.Put("00000000Two", "", cf: cf);
                db.Put("00000000Three", "", cf: cf);
                db.Put("00000001Red", "", cf: cf);
                db.Put("00000001Green", "", cf: cf);
                db.Put("00000001Black", "", cf: cf);
                db.Put("00000002Apple", "", cf: cf);
                db.Put("00000002Cranberry", "", cf: cf);
                db.Put("00000002Banana", "", cf: cf);

                var readOptions = new ReadOptions();
                using (var iter = db.NewIterator(readOptions: readOptions, cf: cf))
                {
                    GC.Collect();
                    GC.WaitForPendingFinalizers();
                    var b = Encoding.UTF8.GetBytes("00000001");
                    iter.Seek(b);
                    while (iter.Valid())
                    {
                        Console.WriteLine(iter.StringKey());
                        iter.Next();
                    }
                }
            }
            Console.WriteLine("Done...");
        }
Example #13
0
        private static ColumnFamilies GetColumnFamilies(IDbConfig dbConfig, string name, T[] keys)
        {
            var result         = new ColumnFamilies();
            var blockCacheSize = ReadConfig <ulong>(dbConfig, nameof(dbConfig.BlockCacheSize), name);

            foreach (var key in keys)
            {
                var columnFamilyOptions = new ColumnFamilyOptions();
                columnFamilyOptions.OptimizeForPointLookup(blockCacheSize);
                columnFamilyOptions.SetBlockBasedTableFactory(new BlockBasedTableOptions().SetFilterPolicy(BloomFilterPolicy.Create()));
                result.Add(key.ToString(), columnFamilyOptions);
            }
            return(result);
        }
Example #14
0
        public DataContext(string path = "ether.db")
        {
            _lastTxIdDictionary = new Dictionary <string, long>();

            var options = new DbOptions()
                          .SetCreateIfMissing(true)
                          .SetCreateMissingColumnFamilies(true);

            // Create column families
            IEnumerable <string> cols           = null;
            ColumnFamilies       columnFamilies = new ColumnFamilies();

            try
            {
                cols = RocksDb.ListColumnFamilies(options, path);
                foreach (var col in cols)
                {
                    columnFamilies.Add(col, new ColumnFamilyOptions());
                }
            }
            catch (Exception e)
            {
                // Database not exist nothing todo
            }
            finally
            {
                _db = RocksDb.Open(options, path, columnFamilies);

                // Load column families to the dictionary
                _columnFamiliesDictionary = new Dictionary <string, ColumnFamilyHandle>();
                if (cols != null)
                {
                    foreach (var col in cols)
                    {
                        _columnFamiliesDictionary.Add(col, _db.GetColumnFamily(col));
                    }
                    foreach (var col in cols)
                    {
                        // Load latest transaction Ids
                        if (!col.Contains(':') && col != "default")
                        {
                            var lastTxIdstr = _db.Get("lastTxId", GetColFamily(col + ":lastid"));
                            _lastTxIdDictionary.Add(col,
                                                    string.IsNullOrEmpty(lastTxIdstr) ? 0 : long.Parse(lastTxIdstr));
                        }
                    }
                }
            }
        }
                static ColumnFamilies GetColumnFamilies(string path)
                {
                    if (RocksDb.TryListColumnFamilies(new DbOptions(), path, out var names))
                    {
                        var columnFamilyOptions = new ColumnFamilyOptions();
                        var families            = new ColumnFamilies();
                        foreach (var name in names)
                        {
                            families.Add(name, columnFamilyOptions);
                        }
                        return(families);
                    }

                    return(new ColumnFamilies());
                }
Example #16
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (Name.Length != 0)
            {
                hash ^= Name.GetHashCode();
            }
            hash ^= ColumnFamilies.GetHashCode();
            if (Granularity != 0)
            {
                hash ^= Granularity.GetHashCode();
            }
            return(hash);
        }
Example #17
0
        static RocksDb GetRocksDb()
        {
            // try find on network
            var options = new DbOptions()
                          .SetCreateIfMissing(true)
                          .SetCreateMissingColumnFamilies(true);
            var columnFamilies = new ColumnFamilies
            {
                { COLUMN_FAMILY, new ColumnFamilyOptions() }
            };

            var db = RocksDb.Open(options, _path, columnFamilies);

            return(db);
        }
Example #18
0
        private RocksDbStore(string fileName)
        {
            AppDomain.CurrentDomain.ProcessExit += (s, e) => Shutdown();
            logger.Message("RocksDBStore: " + fileName);
            this.fileName = fileName.Replace("\\", "/");

            var path = Path.GetDirectoryName(fileName);

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            //TODO check options
            var options = new DbOptions()
                          .SetCreateIfMissing(true)
                          .SetCreateMissingColumnFamilies(true);

            var columnFamilies = new ColumnFamilies
            {
                { "default", new ColumnFamilyOptions().OptimizeForPointLookup(256) },
                //{ "test", new ColumnFamilyOptions()
                //    //.SetWriteBufferSize(writeBufferSize)
                //    //.SetMaxWriteBufferNumber(maxWriteBufferNumber)
                //    //.SetMinWriteBufferNumberToMerge(minWriteBufferNumberToMerge)
                //    .SetMemtableHugePageSize(2 * 1024 * 1024)
                //    .SetPrefixExtractor(SliceTransform.CreateFixedPrefix((ulong)8))
                //    .SetBlockBasedTableFactory(bbto)
                //},
            };

            try
            {
                var partitionList = RocksDb.ListColumnFamilies(options, path);

                foreach (var partition in partitionList)
                {
                    columnFamilies.Add(partition, new ColumnFamilyOptions());
                }
            }
            catch
            {
                logger.Warning("Inital start, no partitions created yet!");
            }

            logger.Message("Opening database at: " + path);
            _db = RocksDb.Open(options, path, columnFamilies);
        }
Example #19
0
        private static void RocksDb2()
        {
            string directory = @"C:\Users\Peska\source\repos\Esent.Tests\RocksDB";

            DbOptions options = new DbOptions().SetCreateIfMissing();

            using (RocksDb rocksDb = RocksDbSharp.RocksDb.Open(options, directory))
            {
                TestObject o1 = new TestObject {
                    EQNum = "3L1234", Mnemonic = "20013L1234011"
                };
                TestObject o2 = new TestObject {
                    EQNum = "3L5678", Mnemonic = "20023L5678011"
                };
                TestObject o3 = new TestObject {
                    EQNum = "3L9012", Mnemonic = "20033L9012011"
                };
                TestObject o4 = new TestObject {
                    EQNum = "3L9012", Mnemonic = "20013L9012012"
                };

                rocksDb.Put(o1.Mnemonic, JsonConvert.SerializeObject(o1));
                rocksDb.Put(o2.Mnemonic, JsonConvert.SerializeObject(o2));
                rocksDb.Put(o3.Mnemonic, JsonConvert.SerializeObject(o3));
                rocksDb.Put(o4.Mnemonic, JsonConvert.SerializeObject(o4));

                SliceTransform         sliceTransform         = SliceTransform.CreateFixedPrefix(4);
                BlockBasedTableOptions blockBasedTableOptions = new BlockBasedTableOptions().SetWholeKeyFiltering(false);

                ColumnFamilyOptions columnFamilyOptions = new ColumnFamilyOptions()
                                                          .SetPrefixExtractor(sliceTransform)
                                                          .SetBlockBasedTableFactory(blockBasedTableOptions);

                ColumnFamilies columnFamilies = new ColumnFamilies(columnFamilyOptions);

                Iterator iterator = rocksDb.NewIterator();
                iterator = iterator.Seek("2001");

                while (iterator.Valid())
                {
                    string key   = iterator.StringKey();
                    string value = iterator.StringValue();

                    iterator.Next();
                }
            }
        }
Example #20
0
        public Database(string path)
        {
            var columnFamilies = new ColumnFamilies {
                { BLOCKS_FAMILY, new ColumnFamilyOptions() },
                { BLOCK_INDEX_FAMILY, new ColumnFamilyOptions() },
                { TRANSACTIONS_FAMILY, new ColumnFamilyOptions() }
            };

            var options = new DbOptions()
                          .SetCreateIfMissing(true)
                          .SetCreateMissingColumnFamilies(true);

            db                 = RocksDb.Open(options, path, columnFamilies);
            blocksFamily       = db.GetColumnFamily(BLOCKS_FAMILY);
            blockIndexFamily   = db.GetColumnFamily(BLOCK_INDEX_FAMILY);
            transactionsFamily = db.GetColumnFamily(TRANSACTIONS_FAMILY);
        }
Example #21
0
        /// <summary>
        /// Open <see cref="RocksDb"/> from path in configuration.
        /// </summary>
        /// <param name="path">The path of <see cref="RocksDb"/> to load.</param>
        /// <returns>A <see cref="RocksDb"/> instance.</returns>
        public RocksDb Load(string path)
        {
            var columnFamilies = new ColumnFamilies();

            foreach (var columnFamily in RocksDb.ListColumnFamilies(
                         _options,
                         path))
            {
                if (columnFamily is null)
                {
                    continue;
                }

                columnFamilies.Add(columnFamily, new ColumnFamilyOptions());
            }

            return(RocksDb.Open(_options, path, columnFamilies !));
        }
Example #22
0
        private void Start()
        {
            var options = new DbOptions().SetCreateIfMissing()
                          .SetCreateMissingColumnFamilies()
                          .SetMaxBackgroundCompactions(4)
                          .SetMaxBackgroundFlushes(2)
                          .SetBytesPerSync(1024 * 1024);

            var columnFamilies = new ColumnFamilies
            {
                { "Peers", ColumnFamilyOptions() },
                { "Subscriptions", ColumnFamilyOptions() }
            };

            _db = RocksDbSharp.RocksDb.Open(options, DatabaseFilePath, columnFamilies);

            _peersColumnFamily         = _db.GetColumnFamily("Peers");
            _subscriptionsColumnFamily = _db.GetColumnFamily("Subscriptions");
Example #23
0
        static void Test9()
        {
            var dbop = new DbOptions()
                       .SetCreateIfMissing(true)
                       .SetCreateMissingColumnFamilies(true);

            var columnFamilies = new ColumnFamilies
            {
                { "reverse1", new ColumnFamilyOptions() },
                { "reverse2", new ColumnFamilyOptions() },
            };
            var db      = TransactionDB.Open(dbop, new TransactionDBOptions(), "transaction_db_test5", columnFamilies);
            var reverse = db.GetColumnFamily("reverse1");
            var wop     = new WriteOptions();

            for (int i = 0; i < 10; i += 2)
            {
                db.Put(i.ToString(), i.ToString(), reverse);
            }
            Console.WriteLine("begin");
            var t1 = Task.Run(async() =>
            {
                var it = db.NewIterator(reverse);
                it.SeekToFirst();
                while (it.Valid())
                {
                    Console.WriteLine("it:key=" + it.StringKey() + ",value" + it.StringValue());
                    await Task.Delay(500);
                    it.Next();
                }
            });
            var t2 = Task.Run(async() =>
            {
                for (int i = 1; i < 10; i += 2)
                {
                    await Task.Delay(500);
                    db.Remove(i.ToString());
                    Console.WriteLine("write key=" + i);
                }
            });

            Task.WaitAll(t1, t2);
        }
Example #24
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (Name.Length != 0)
            {
                hash ^= Name.GetHashCode();
            }
            if (currentOperation_ != null)
            {
                hash ^= CurrentOperation.GetHashCode();
            }
            hash ^= ColumnFamilies.GetHashCode();
            if (Granularity != global::Google.Bigtable.Admin.Table.V1.Table.Types.TimestampGranularity.MILLIS)
            {
                hash ^= Granularity.GetHashCode();
            }
            return(hash);
        }
Example #25
0
        public static RocksDbWrapper Create(IRocksDbOptionsProvider optionsProvider, string path, IEnumerable <string> partitionsList)
        {
            Preconditions.CheckNonWhiteSpace(path, nameof(path));
            Preconditions.CheckNotNull(optionsProvider, nameof(optionsProvider));
            DbOptions            dbOptions = Preconditions.CheckNotNull(optionsProvider.GetDbOptions());
            IEnumerable <string> existingColumnFamilies = ListColumnFamilies(dbOptions, path);
            IEnumerable <string> columnFamiliesList     = existingColumnFamilies.Union(Preconditions.CheckNotNull(partitionsList, nameof(partitionsList)), StringComparer.OrdinalIgnoreCase).ToList();
            var columnFamilies = new ColumnFamilies();

            foreach (string columnFamilyName in columnFamiliesList)
            {
                columnFamilies.Add(columnFamilyName, optionsProvider.GetColumnFamilyOptions());
            }

            RocksDb db             = RocksDb.Open(dbOptions, path, columnFamilies);
            var     rocksDbWrapper = new RocksDbWrapper(dbOptions, db, path);

            return(rocksDbWrapper);
        }
Example #26
0
        static void Test8()
        {
            var dbop = new DbOptions()
                       .SetCreateIfMissing(true)
                       .SetCreateMissingColumnFamilies(true);

            var columnFamilies = new ColumnFamilies
            {
                { "reverse1", new ColumnFamilyOptions() },
                { "reverse2", new ColumnFamilyOptions() },
            };
            var    db      = TransactionDB.Open(dbop, new TransactionDBOptions(), "transaction_db_test2", columnFamilies);
            var    reverse = db.GetColumnFamily("reverse1");
            var    wop     = new WriteOptions();
            var    txnOp   = new TransactionOptions();
            string key     = "1112";
            var    t1      = Task.Run(async() =>
            {
                var txn = new Transaction(db, wop, txnOp);
                await Task.Delay(700);
                Console.WriteLine("11110:" + txn.Get(key, reverse));
                txn.Put(key, "3002", reverse);
                Console.WriteLine("11111:" + txn.Get(key, reverse));
                await Task.Delay(1000);
                Console.WriteLine("11112:" + txn.Get(key, reverse));
                txn.Put(key, "3002", reverse);
                Console.WriteLine("11113:" + txn.Get(key, reverse) + ",thread=" + Thread.CurrentThread.ManagedThreadId);
                txn.Commit();
            });
            var t2 = Task.Run(async() =>
            {
                await Task.Delay(100);
                db.Put(key, "44444", reverse);
                Console.WriteLine("write1:" + db.Get(key, reverse));
                await Task.Delay(1000);
                db.Put(key, "444442", reverse);
                Console.WriteLine("write2:" + db.Get(key, reverse));
            });

            Task.WaitAll(t1, t2);
            Console.WriteLine("end:" + db.Get("11", reverse));
        }
Example #27
0
        private RocksDbStore(string fileName, Logger logger)
        {
            AppDomain.CurrentDomain.ProcessExit += (s, e) => Shutdown();
            this.logger = logger;
            logger.Message("RocksDBStore: " + fileName);
            this.fileName = fileName.Replace("\\", "/");

            var path = Path.GetDirectoryName(fileName);

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            //TODO check options
            var options = new DbOptions()
                          .SetCreateIfMissing(true)
                          .SetCreateMissingColumnFamilies(true);

            var columnFamilies = new ColumnFamilies
            {
                { "default", new ColumnFamilyOptions().OptimizeForPointLookup(256) },
            };

            try
            {
                var partitionList = RocksDb.ListColumnFamilies(options, path);

                foreach (var partition in partitionList)
                {
                    columnFamilies.Add(partition, new ColumnFamilyOptions());
                }
            }
            catch
            {
                logger.Warning("Inital start, no partitions created yet!");
            }

            logger.Message("Opening database at: " + path);
            _db.Add(fileName, RocksDb.Open(options, path, columnFamilies));
        }
Example #28
0
        private ColumnFamilies GetColumnFamilies(DbOptions options, string dbName)
        {
            var           dbPath         = Path.Combine(_path, dbName);
            var           columnFamilies = new ColumnFamilies();
            List <string> listColumnFamilies;

            try
            {
                listColumnFamilies = RocksDb.ListColumnFamilies(options, dbPath).ToList();
            }
            catch (RocksDbException)
            {
                listColumnFamilies = new List <string>();
            }

            foreach (string name in listColumnFamilies)
            {
                columnFamilies.Add(name, _options);
            }

            return(columnFamilies);
        }
Example #29
0
        /// <summary>
        /// Open rocksdb handle
        /// </summary>
        /// <param name="dbOptions">Rocksdb options</param>
        /// <param name="columnFamilyOptions">Columnfamily options</param>
        /// <exception cref="ProcessorStateException">throws if the rocksdb can't be open</exception>
        private void OpenRocksDb(DbOptions dbOptions, ColumnFamilyOptions columnFamilyOptions)
        {
            int              maxRetries       = 5;
            int              i                = 0;
            bool             open             = false;
            RocksDbException rocksDbException = null;

            var columnFamilyDescriptors = new ColumnFamilies(columnFamilyOptions);

            while (!open && i < maxRetries)
            {
                try
                {
                    Db = RocksDbSharp.RocksDb.Open(
                        dbOptions,
                        DbDir.FullName,
                        columnFamilyDescriptors);

                    var columnFamilyHandle = Db.GetDefaultColumnFamily();
                    DbAdapter = new SingleColumnFamilyAdapter(
                        Name,
                        Db,
                        writeOptions,
                        KeyComparator,
                        columnFamilyHandle);
                    open = true;
                }
                catch (RocksDbException e)
                {
                    ++i;
                    rocksDbException = e;
                }
            }

            if (!open)
            {
                throw new ProcessorStateException("Error opening store " + Name + " at location " + DbDir.ToString(), rocksDbException);
            }
        }
Example #30
0
        static void Test7()
        {
            var dbop = new DbOptions()
                       .SetCreateIfMissing(true)
                       .SetCreateMissingColumnFamilies(true);

            var columnFamilies = new ColumnFamilies
            {
                { "reverse1", new ColumnFamilyOptions() },
                { "reverse2", new ColumnFamilyOptions() },
            };
            var db      = TransactionDB.Open(dbop, new TransactionDBOptions(), "transaction_db_test2", columnFamilies);
            var reverse = db.GetColumnFamily("reverse1");
            var r1      = new Random(1);
            var r2      = new Random(2);

            Task.Run(() =>
            {
                int times = 0;
                while (++times <= 1000)
                {
                    db.Put("11", r1.Next(2) == 0 ? "a11" : "a12", reverse);
                    db.Put("22", r1.Next(2) == 0 ? "a22" : "a23", reverse);
                }
            });
            Task.Run(() =>
            {
                int times = 0;
                while (++times <= 1000)
                {
                    db.Put("22", r2.Next(2) == 0 ? "a22" : "a23", reverse);
                    db.Put("11", r2.Next(2) == 0 ? "a11" : "a12", reverse);
                }
            });
            Console.WriteLine(db.Get("11", reverse));
            Console.WriteLine(db.Get("22", reverse));
        }