public BPlusTree(Stream metadataStream, Stream indexStream, Stream dataStream, int order, int alignment, int cluster_data_length, IKey_Serializer <T> serializer) { Order = order; Alignment = alignment; Cluster_Data_Length = cluster_data_length; _key_Serializer = serializer; _node_Factory = new Node_Factory <T>(_key_Serializer, Order, Alignment, Cluster_Data_Length); _block_Size = _node_Factory.Size_In_Bytes(Order); _data_Serializer = new Data_Serializer <T>(_key_Serializer, Alignment, 2, 1024); _pending_Changes = new Pending_Changes <T>(_block_Size, _index_Pointer, _data_Pointer, _node_Factory, _data_Serializer); Index_Stream = indexStream; Data_Stream = dataStream; Metadata_Stream = metadataStream; Cached_Nodes = new Dictionary <long, Node <T> >(); _cache = new Cache_LRU <long, Node <T> >(() => this.Current_Time); _metadata = new Metadata { Order = Order }; Init(); }
public BPlusTree(Configuration <T> cfg) { Order = cfg.BPTree_Order; Alignment = cfg.Alignment; Cluster_Data_Length = cfg.Clustering_Data_Length; _key_Serializer = cfg.Key_Serializer; _node_Factory = new Node_Factory <T>(_key_Serializer, Order, Alignment, Cluster_Data_Length); _block_Size = _node_Factory.Size_In_Bytes(Order); _data_Serializer = new Data_Serializer <T>(_key_Serializer, Alignment, 2, 1024); _pending_Changes = new Pending_Changes <T>(_block_Size, _index_Pointer, _data_Pointer, _node_Factory, _data_Serializer); _streamFactory = cfg.Stream_Factory; Index_Stream = _streamFactory.Create_ReadWrite_Index_Stream(); Data_Stream = _streamFactory.Create_ReadWrite_Data_Stream(); Metadata_Stream = _streamFactory.Create_ReadWrite_Metadata_Stream(); Cached_Nodes = new Dictionary <long, Node <T> >(); _cache = new Cache_LRU <long, Node <T> >(() => this.Current_Time); _metadata = new Metadata { Order = Order }; Init(); }
public Data_Serializer(IKey_Serializer <T> serializer, int alignment, int read_ahead_blocks, int bufferSize) { _alignment = alignment; _read_ahead_blocks = read_ahead_blocks; _buffer_Size = bufferSize; _key_serializer = serializer; }
public Node_Factory(IKey_Serializer <T> serializer, int order, int alignment, int clusteredDataSize) { Serializer = serializer; Order = order; Alignment = alignment; IsClustered = clusteredDataSize > 0; IsAligned = alignment > 0; Clustered_Data_Size = clusteredDataSize; builder = Task.Factory.StartNew(Build, TaskCreationOptions.LongRunning); }
public Data <T> From_Bytes(byte[] buffer, int startIndex, IKey_Serializer <T> serializer) { var data = new Data <T> { Key = serializer.Get_Instance(buffer, startIndex), Timestamp = DateTime.FromBinary(BitConverter.ToInt64(buffer, startIndex + 4)), Version = BitConverter.ToInt32(buffer, startIndex + 12), Previous_Version_Address = BitConverter.ToInt64(buffer, startIndex + 16), }; int payload_Length = BitConverter.ToInt32(buffer, startIndex + 24); data.Payload = new byte[payload_Length]; Array.Copy(buffer, startIndex + 28, data.Payload, 0, payload_Length); return(data); }