目前我的数据库中有一个“Log”表。它有超过2亿行的生产。我想把这个表分成产品类型,ProdALog,ProdBLog,ProdCLog等。我希望能够创建一个新表而不必更新我的edmx并重新部署我的服务应用程序。
将日志推送到服务,然后该服务将插入到日志表
中context.Logs.Add(log);
//insert 100
context.SaveChanges()
// rebuild context and loop till all logs are inserted
我希望我的服务能够基本上做到
context.Database.ExecuteSqlCommand(string.Format("INSERT INTO {0} (Source, Message) VALUES ('HERE', 'Something Happened')"), table)
在性能方面以这种方式打电话,我会失去什么吗?这是一个很好的解决'选择需要长时间'的问题(通过拆分表,产品只会查找其关联表中的日志。因此,具有最少日志的产品不会被其他产品的日志所困扰。)
我可以为每个创建的新表更新edmx,然后有一个开关
switch(type) {
case "ProdA": context.ProdALogs.Add(new ProdALog(...)); break;
case "ProdB": context.ProdBLogs.Add(new ProdBLog(...)); break;
case "ProdC": context.ProdCLogs.Add(new ProdCLog(...)); break;
default: context.Logs.Add(new Log(...)); break;
}
但这需要在每次创建/删除新表时重新发布服务
我希望能通过实体框架6以更清晰的方式做这样的事情。
其他信息
日志表是(Id,ProdId,Type,Source,Message,Dat,Tim,Level) 我有(ProdId,Dat,Tim,Level),(ProdId,Dat,Level),(ProdId)的索引 索引每晚重建。 Dat是int = 20160708 蒂姆是一个int = 81552 //(8:15:52)|| 225000(22:50:00)
我知道这不会减少日志数量,但它会“限制”每次读取时处理的日志。
实体框架6正在从请求不超过10,000个日志的网页读取日志。搜索超时是因为它们花费的时间超过60秒。