示例#1
0
        // TODO increase default size
        public KeyValueStore(string name, KeyStoreDataSize dataSize, int cacheSize)
        {
            var fileName = name + ".bin";

            var useDisk = cacheSize != -1;

            _memory = new MemoryStore(cacheSize);
            if (useDisk)
            {
                _disk = new DiskStore(fileName, dataSize);
            }
        }
示例#2
0
        public static uint GetMaxAlllowedItemSize(KeyStoreDataSize dataSize)
        {
            switch (dataSize)
            {
            case KeyStoreDataSize.Small: return(0xFF);

            case KeyStoreDataSize.Medium: return(0xFFFF);

            case KeyStoreDataSize.Large: return(0xFFFFFF);

            case KeyStoreDataSize.Huge: return(0xFFFFFF);

            default: throw new Exception("invalid data size");
            }
        }
示例#3
0
        public DiskStore(string fileName, KeyStoreDataSize dataSize)
        {
            Throw.If(string.IsNullOrEmpty(fileName), "invalid filename");

            this.DataSize = dataSize;

            //var path = Path.GetDirectoryName(fileName);
            var path = "Storage";

            fileName      = path + "/" + Path.GetFileName(fileName);
            this.fileName = fileName;

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

            _lastBlockOffset = 0;
            _stream          = null;

            if (File.Exists(fileName))
            {
                ReadBlocks();
            }

            if (BackgroundWriting)
            {
                lock (_globalLock)
                {
                    if (_diskThread == null)
                    {
                        _diskThread = new Thread(BackgroundTask);

                        _diskThread.Start();
                    }

                    _storeMap[fileName] = this;
                }
            }

            _ready = true;
        }
示例#4
0
 public KeyValueStore(Address address, string name, KeyStoreDataSize dataSize, int cacheSize = 16) : this(address.Text + "_" + name, dataSize, cacheSize)
 {
 }
示例#5
0
 public DiskStorageContext(Address address, string name, KeyStoreDataSize dataSize)
 {
     _memory = new MemoryStore(32);
     _disk   = new DiskStore(address.Text + "_" + name, dataSize);
 }