//public  static string Title(Customer c)
 //{
 //    return c.CreateTitle($"{PartTitle(c)}, {c.AccountNumber}");
 //}
 private static string PartTitle(Customer c)
 {
     return(IsStore(c) ? StoreFunctions.Title(c.Store) : PersonFunctions.Title(c.Person));
 }
示例#2
0
        public FasterStore(IOptions <FasterStoreOptions> optionsProvider, IFasterEqualityComparer <TKey> keyComparer, ILogger <FasterStore <TKey, TValue> > logger)
        {
            _logger = logger;
            var options         = optionsProvider.Value;
            var indexStorePath  = Path.Combine(options.Directory, $"{options.Name}-index.log");
            var objectStorePath = Path.Combine(options.Directory, $"{options.Name}-object.log");

            _indexDevice = Devices.CreateLogDevice(indexStorePath,
                                                   preallocateFile: false, deleteOnClose: false, recoverDevice: true);

            _objectDevice = Devices.CreateLogDevice(objectStorePath,
                                                    preallocateFile: false, deleteOnClose: false, recoverDevice: true);

            _checkpointsPath = Path.Combine(options.Directory, "checkpoints");

            if (!Directory.Exists(_checkpointsPath))
            {
                _logger.LogInformation("Checkpoints directory not exists. Creating...");
                Directory.CreateDirectory(_checkpointsPath);
            }

            var logSettings = new LogSettings
            {
                LogDevice         = _indexDevice,
                ObjectLogDevice   = _objectDevice,
                MemorySizeBits    = (int)options.MemorySize,
                PageSizeBits      = (int)options.PageSize,
                SegmentSizeBits   = (int)options.SegmentSize,
                ReadCacheSettings = new ReadCacheSettings()
                {
                    MemorySizeBits       = (int)options.MemorySize + 1,
                    PageSizeBits         = (int)options.PageSize + 1,
                    SecondChanceFraction = .2
                }
            };

            _serializerSettings = new SerializerSettings <KeyHolder, ValueHolder>
            {
                keySerializer   = () => new KeySerializer(options.JsonOptions),
                valueSerializer = () => new ValueSerializer(options.JsonOptions)
            };

            var comparer            = new KeyComparerAdapter(keyComparer);
            var functions           = new StoreFunctions(_logger);
            var checkpointsSettings = new CheckpointSettings
            {
                CheckpointDir  = _checkpointsPath,
                CheckPointType = CheckpointType.Snapshot
            };

            _keyValueStore = new FasterKV <KeyHolder, ValueHolder, ValueHolder, ValueHolder, StoreContext, StoreFunctions>(
                StoreSize, functions, logSettings, checkpointsSettings, _serializerSettings, comparer);

            var checkpoints = Directory.GetDirectories(_checkpointsPath).Length;

            if (checkpoints > 0)
            {
                _logger.LogInformation($"Found {checkpoints} checkpoints. Recovering store...");
                _keyValueStore.Recover();
                _logger.LogInformation("Store recovered from checkpoints");
            }

            _session = _keyValueStore.NewSession();
        }