Пример #1
0
        public IList <Document> ReadDocuments(IList <int> documentIds)
        {
            var addresses = new List <BlockInfo>(documentIds.Count);

            foreach (var id in documentIds)
            {
                addresses.Add(new BlockInfo(id * _blockSize, _blockSize));
            }

            var docAddresses = _addressReader.Read(addresses);
            var index        = 0;
            var documents    = new List <Document>(documentIds.Count);

            _stream.Seek(Version.KeyIndexOffset, SeekOrigin.Begin);
            var keyIndex = TableSerializer.ReadKeyIndex(_stream, Version.KeyIndexSize);

            using (var documentReader = new DocumentReader(
                       _stream, Version.Compression, keyIndex, leaveOpen: true))

                foreach (var document in documentReader.Read(docAddresses))
                {
                    document.Id = documentIds[index++];
                    documents.Add(document);
                }

            return(documents);
        }
Пример #2
0
        public DocHash Read(int docId)
        {
            var pos = docId * TableSerializer.SizeOfDocHash() + _offset;

            _stream.Seek(pos, SeekOrigin.Begin);

            var hash = TableSerializer.DeserializeDocHash(_stream);

            return(hash);
        }
Пример #3
0
        public DtblStream(Stream stream, BatchInfo ix, int skip = 0, int take = int.MaxValue)
            : base(ix.PrimaryKeyFieldName)
        {
            _dataFile = stream;
            _ix       = ix;
            _dataFile.Seek(_ix.KeyIndexOffset, SeekOrigin.Begin);
            var keyIndex = TableSerializer.ReadKeyIndex(_dataFile, _ix.KeyIndexSize);

            _hashReader     = new DocHashReader(_dataFile, _ix.DocHashOffset, leaveOpen: false);
            _addressReader  = new DocumentAddressReader(_dataFile, _ix.DocAddressesOffset);
            _documentReader = new DocumentReader(_dataFile, _ix.Compression, keyIndex, leaveOpen: false);

            _skip = skip;
            _take = take;
        }
Пример #4
0
        public static BatchInfo Load(string fileName)
        {
            var time = new Stopwatch();

            time.Start();

            BatchInfo ix;

            using (var fs = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                ix = TableSerializer.DeserializeBatchInfo(fs);
            }

            Log.DebugFormat("loaded ix in {0}", time.Elapsed);

            return(ix);
        }
Пример #5
0
        protected override Document Deserialize(long offset, int size, Stream stream)
        {
            stream.Seek(_offset + offset, SeekOrigin.Begin);

            return(TableSerializer.DeserializeDocument(stream, size, _compression, _keyIndex));
        }
Пример #6
0
        protected override IList <DocumentPosting> Deserialize(long offset, int size, Stream stream)
        {
            stream.Seek(offset, SeekOrigin.Begin);

            return(TableSerializer.DeserializePostings(stream, size));
        }