Asp.net mvc AWS DynamoDB会话表不断增长,can';不要删除过期的会话
ASP.NET_SessionState表一直在增长,已经达到18GB,没有删除过期会话的迹象 我们已尝试执行DynamoDBSessionStateStore.DeleteExpiredSessions,但似乎没有效果 我们的系统运行良好,创建了会话,最终用户没有意识到这个问题。然而,桌子一直在增长是没有意义的。。。Asp.net mvc AWS DynamoDB会话表不断增长,can';不要删除过期的会话,asp.net-mvc,session-state,aws-sdk,Asp.net Mvc,Session State,Aws Sdk,ASP.NET_SessionState表一直在增长,已经达到18GB,没有删除过期会话的迹象 我们已尝试执行DynamoDBSessionStateStore.DeleteExpiredSessions,但似乎没有效果 我们的系统运行良好,创建了会话,最终用户没有意识到这个问题。然而,桌子一直在增长是没有意义的。。。 我们已经对权限/安全性进行了三次检查,似乎一切正常。我们使用SDK版本3.1.0。还有什么需要检查的呢?由于您的表超过了18 GB,这相当大(在本文中),因此在查看GitHub上
我们已经对权限/安全性进行了三次检查,似乎一切正常。我们使用SDK版本3.1.0。还有什么需要检查的呢?由于您的表超过了18 GB,这相当大(在本文中),因此在查看GitHub上的方法代码后,这一点并不奇怪 代码如下:
注意:我没有测试上面的代码,但它只是对开放源代码的简单修改,因此应该可以正常工作,但需要进行测试,以确保分页在扫描记录时被删除的表上正确工作。我向AWS提交了一个请求,以修复其代码中的此错误:感谢@JaredHatfield,这是对工作原理的非常好的了解!!我们接受了pull请求,并将版本3.1.0.2推出到NuGet
public static void DeleteExpiredSessions(IAmazonDynamoDB dbClient, string tableName)
{
LogInfo("DeleteExpiredSessions");
Table table = Table.LoadTable(dbClient, tableName, DynamoDBEntryConversion.V1);
ScanFilter filter = new ScanFilter();
filter.AddCondition(ATTRIBUTE_EXPIRES, ScanOperator.LessThan, DateTime.Now);
ScanOperationConfig config = new ScanOperationConfig();
config.AttributesToGet = new List<string> { ATTRIBUTE_SESSION_ID };
config.Select = SelectValues.SpecificAttributes;
config.Filter = filter;
DocumentBatchWrite batchWrite = table.CreateBatchWrite();
Search search = table.Scan(config);
do
{
List<Document> page = search.GetNextSet();
foreach (var document in page)
{
batchWrite.AddItemToDelete(document);
}
} while (!search.IsDone);
batchWrite.Execute();
}
public static void DeleteExpiredSessions(IAmazonDynamoDB dbClient, string tableName)
{
LogInfo("DeleteExpiredSessions");
Table table = Table.LoadTable(dbClient, tableName, DynamoDBEntryConversion.V1);
ScanFilter filter = new ScanFilter();
filter.AddCondition(ATTRIBUTE_EXPIRES, ScanOperator.LessThan, DateTime.Now);
ScanOperationConfig config = new ScanOperationConfig();
config.AttributesToGet = new List<string> { ATTRIBUTE_SESSION_ID };
config.Select = SelectValues.SpecificAttributes;
config.Filter = filter;
Search search = table.Scan(config);
do
{
// Perform a batch delete for each page returned
DocumentBatchWrite batchWrite = table.CreateBatchWrite();
List<Document> page = search.GetNextSet();
foreach (var document in page)
{
batchWrite.AddItemToDelete(document);
}
batchWrite.Execute();
} while (!search.IsDone);
}