public List <MetricRecord> RetriveDataRecord(int id, int startIndex, int endIndex) { List <MetricRecord> result = new List <MetricRecord>(); startIndex = startIndex < 0 ? 0 : startIndex; if (endIndex < startIndex) { return(result); } string query = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, id.ToString()); query = TableQuery.CombineFilters( query, TableOperators.And, TableQuery.GenerateFilterCondition( "RowKey", QueryComparisons.GreaterThanOrEqual, ((startIndex / MetricEntity.MaxMetricRecord) * MetricEntity.MaxMetricRecord).ToString(RowKeyFormat)) ); query = TableQuery.CombineFilters( query, TableOperators.And, TableQuery.GenerateFilterCondition( "RowKey", QueryComparisons.LessThanOrEqual, ((endIndex / MetricEntity.MaxMetricRecord) * MetricEntity.MaxMetricRecord).ToString(RowKeyFormat)) ); TableQuery <DynamicTableEntity> rangeQuery = new TableQuery <DynamicTableEntity>().Where(query); foreach (DynamicTableEntity entity in _metricData.ExecuteQuery(rangeQuery)) { MetricEntity mentity = new MetricEntity(entity); int offset = int.Parse(entity.RowKey); int index; for (int i = 0; i < mentity.Count; i++) { index = offset + i; if (index >= startIndex && index <= endIndex) { result.Add(mentity.Get(i)); } } } return(result); }
public void AppendDataRecord(int id, string key, string value) { if (System.Text.UTF8Encoding.UTF8.GetByteCount(key) > MetricRecordKeyTooLongException.MaxKeyLengthInByte) { throw new MetricRecordKeyTooLongException(); } using (var _gorillaCtx = new MSGorillaEntities()) { MetricDataSet data = _gorillaCtx.MetricDataSets.Find(id); if (data == null) { throw new MetricDataSetNotFoundException(); } MetricEntity mentity = null; if ((data.RecordCount % MetricEntity.MaxMetricRecord) == 0) { //create a new entity mentity = new MetricEntity(id.ToString(), data.RecordCount.ToString(RowKeyFormat)); } else { //retrive the last entity TableResult result = _metricData.ExecuteRetriveOperation( TableOperation.Retrieve <DynamicTableEntity>( id.ToString(), ((data.RecordCount / MetricEntity.MaxMetricRecord) * MetricEntity.MaxMetricRecord).ToString(RowKeyFormat) ) ); mentity = new MetricEntity((DynamicTableEntity)result.Result); } //insert new data record mentity.Put(key, value, DateTime.UtcNow); TableOperation insertOperation = TableOperation.InsertOrReplace(mentity.ToITableEntity()); _metricData.Execute(insertOperation); data.RecordCount++; _gorillaCtx.SaveChanges(); } }