কীভাবে আমরা এই ক্যোয়ারির গতি বাড়াব?
নিম্নলিখিত কোয়েরি কার্যকর করার সময়কালে আমাদের প্রায় 100 ভোক্তা রয়েছে1-2 minutes
। এই রানগুলির প্রত্যেকটিই একটি গ্রাহক ক্রিয়াকলাপের 1 রান উপস্থাপন করে।
TableQuery<T> treanslationsQuery = new TableQuery<T>()
.Where(
TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, sourceDestinationPartitionKey)
, TableOperators.Or,
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, anySourceDestinationPartitionKey)
)
);
এই ক্যোয়ারিতে প্রায় 5000 টি ফলাফল আসবে ।
সম্পূর্ণ কোড:
public static async Task<IEnumerable<T>> ExecuteQueryAsync<T>(this CloudTable table, TableQuery<T> query) where T : ITableEntity, new()
{
var items = new List<T>();
TableContinuationToken token = null;
do
{
TableQuerySegment<T> seg = await table.ExecuteQuerySegmentedAsync(query, token);
token = seg.ContinuationToken;
items.AddRange(seg);
} while (token != null);
return items;
}
public static IEnumerable<Translation> Get<T>(string sourceParty, string destinationParty, string wildcardSourceParty, string tableName) where T : ITableEntity, new()
{
var acc = CloudStorageAccount.Parse(Environment.GetEnvironmentVariable("conn"));
var tableClient = acc.CreateCloudTableClient();
var table = tableClient.GetTableReference(Environment.GetEnvironmentVariable("TableCache"));
var sourceDestinationPartitionKey = $"{sourceParty.ToLowerTrim()}-{destinationParty.ToLowerTrim()}";
var anySourceDestinationPartitionKey = $"{wildcardSourceParty}-{destinationParty.ToLowerTrim()}";
TableQuery<T> treanslationsQuery = new TableQuery<T>()
.Where(
TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, sourceDestinationPartitionKey)
, TableOperators.Or,
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, anySourceDestinationPartitionKey)
)
);
var over1000Results = table.ExecuteQueryAsync(treanslationsQuery).Result.Cast<Translation>();
return over1000Results.Where(x => x.expireAt > DateTime.Now)
.Where(x => x.effectiveAt < DateTime.Now);
}
এই মৃত্যুদন্ড কার্যকর করার সময়, যখন 100 জন ভোক্তা থাকে, আপনি দেখতে পাচ্ছেন যে অনুরোধগুলি ক্লাস্টার হবে এবং স্পাইক তৈরি করবে:
এই স্পাইকগুলির সময়, অনুরোধগুলি প্রায় 1 মিনিটের বেশি সময় নেয়:
কীভাবে আমরা এই ক্যোয়ারির গতি বাড়াব?