我使用C#进行API调用,返回JSON,将其分解为嵌套对象,将每个对象分解为字段,并将字段放入Server表中。
有一个字段(OnlineURL)应该是唯一的。
实现这一目标的有效途径是什么?目前,我对从JSON中提取的每个嵌套对象进行数据库调用,然后使用if语句。但这是没有效率的。
发布于 2017-04-30 13:48:09
数据库层
为数据库中的OnlineURL字段创建唯一的索引/约束将强制字段是唯一的,不管哪个系统/代码库引用它。这将导致应用程序错误地插入已经存在OnlineURL的新记录,或者将记录X更新为记录Y已经使用的OnlineURL。
应用层
当OnlineURL已经存在时,规则是什么?你拒绝这些数据吗?更新匹配行吗?也许您希望利用一个存储过程,它将基于OnlineURL插入一个新行,或者更新现有的行。这将将一个2查询进程转换为一个查询,这将对大规模插入产生影响。
假设您的应用程序是串行的,并且是唯一针对数据库工作的应用程序。您还可以保留一个OnlineURL的本地缓存,以便在循环期间使用,从数据库中读取一次列表,对照它检查每个传入记录,然后将插入的每个新OnlineURL添加到列表中。在初始列表中读取仅是一个查询,每个比较都是在内存中完成的。
发布于 2017-04-30 13:23:52
为该字段创建一个索引,它将是。
检查唯一性是必要的,如果不查询数据,则不能完全填充。这意味着您必须检查该列中的整个数据。第一个选项是使用填充因子为80的索引来改进查询,这样就可以避免插入导致的不必要的分页。
另一种选择是使用缓存,并取决于您的设置。您可以在内存中加载整个列并检查该列的唯一性。或者您可以使用像Redis这样的分布式缓存。无论哪种方法,都要分析复杂性、成本,你可能会认为索引是最符合人体工程学的选择。
https://stackoverflow.com/questions/43706860
复制相似问题