首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有很多行的实体框架

有很多行的实体框架
EN

Stack Overflow用户
提问于 2012-06-27 06:45:48
回答 2查看 2.3K关注 0票数 1

我正在开发一个医疗软件,我的目标是将许多自定义操作存储到数据库中。因为跟踪谁做了什么是非常重要的,所以每次用户做有意义的事情(例如写评论、添加一些医疗信息等)时,都会生成一个动作。现在的问题是,随着时间的推移,将会有很多的行动,比如说每名病人10000例,并且可能有50000名患者,总共有5亿例(甚至更多)。

目前,数据库模型如下所示:

代码语言:javascript
复制
[Patient] 1 -- 1 [ActionBlob]

因此,每个病人都有一个大的blob,它包含了作为大序列化字节数组的所有动作。当然,当表变大时,这是行不通的,因为我必须始终在数据库和客户端之间来回传输整个字节数组。

我的下一个想法是列出单独序列化的操作(而不是作为一个大块),即

代码语言:javascript
复制
[Patient] 1 -- * [Action]

但我开始怀疑这是否是一个好方法。现在,当我添加新操作时,我不必序列化所有其他操作并将它们传输到数据库中,而只需序列化一个操作并将其添加到actions表中。但是,如何加载数据,会不会是超低,因为可能有5亿行在一个表?

所以问题基本上是:

  1. server能否处理从5亿行表中加载10000行的问题?(这些数字可能更大)
  2. 实体框架能否在不太慢的情况下处理10000个实体的物化?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-27 07:03:12

第二个想法是正确的,对于SQL数据库来说,拥有更小的百万项并不是问题,而且如果在操作表中索引一些有用的列,它将带来更快的性能。

将操作存储为blob是非常糟糕的想法,因为每次您必须从blob转换为单个记录来搜索,并且它不会提供搜索等的任何好处。

对SQL server来说,正确地索引十亿条记录根本不是问题。

在没有用户界面的情况下,我们将同时看到上百万条记录,我们总是会分页记录,比如1到99,100到199等等。

我们有近1000万行的表,但是一切都很顺利,因为经常搜索的列被索引,外键被索引。

票数 1
EN

Stack Overflow用户

发布于 2012-06-27 06:58:27

问题1和问题2的简短回答:是的。

但是,如果您要一举实现这些“物化”,您宁愿使用SqlBulkCopy。我建议你看看以下几点:

关于您的模型,您绝对不应该使用blob来存储操作。拥有一个包含病人外键的Action表,并确保在此表中有一个时间戳列。这样,每当您必须加载给定患者的操作时,您都可以使用时间作为筛选标准(例如,加载过去2个月的操作)。

由于您可能要为给定的病人获取操作,请确保将病人FK设置为索引。

希望这能有所帮助。

你好,卡里尔

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11220763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档