예제 #1
0
        public WriteSession(string directory, Compression compression)
        {
            var version = LockUtil.GetNextChronologicalFileId();

            _version             = CreateNewSegmentInfo(version);
            _version.Compression = compression;

            Log.InfoFormat("begin writing {0}", _version.Version);

            var docFileName       = Path.Combine(Directory.GetCurrentDirectory(), Path.GetRandomFileName() + ".dtbl");
            var docAddressFn      = Path.Combine(Directory.GetCurrentDirectory(), Path.GetRandomFileName() + ".da");
            var docHashesFileName = Path.Combine(Directory.GetCurrentDirectory(), Path.GetRandomFileName() + ".pk");

            _directory        = directory;
            _keyIndexFileName = Path.Combine(Directory.GetCurrentDirectory(), Path.GetRandomFileName() + ".kix");
            _addressWriter    = new BlockInfoWriter(
                new FileStream(docAddressFn, FileMode.CreateNew, FileAccess.ReadWrite,
                               FileShare.None, 4096, FileOptions.DeleteOnClose));

            _docWriter = new DocumentWriter(
                new FileStream(docFileName, FileMode.CreateNew, FileAccess.ReadWrite,
                               FileShare.None, 4096, FileOptions.DeleteOnClose), compression);

            _docHashesStream = new FileStream(
                docHashesFileName, FileMode.CreateNew, FileAccess.ReadWrite,
                FileShare.None, 4096, FileOptions.DeleteOnClose);

            _keyIndex   = new Dictionary <string, short>();
            _fieldNames = new List <string>();
        }