我正在使用C#进行API调用,获取JSON,将其分解为嵌套对象,将每个对象分解为字段并将字段放入SQL Server表中。
有一个字段(OnlineURL)应该是唯一的。
实现这一目标的有效方法是什么?我目前为从JSON中提取的每个嵌套对象进行数据库调用,然后使用if语句。但这效率不高。
答案 0 :(得分:1)
为该字段创建一个索引,它将是。
如果您不查询数据,有必要检查唯一性,并且无法填写。这意味着您必须检查该列中的整个数据。您的第一个选择是使用填充因子为80的索引来改进查询,这样可以避免插入引起的不必要的页面拆分。
另一种选择是使用缓存并取决于您的设置。 您可以将整个列加载到内存中并检查其中的唯一性。或者您可以使用像Redis这样的分布式缓存。无论哪种方式都可以分析复杂性成本,并且您可能认为指数是最符合人体工程学的选择。
答案 1 :(得分:1)
数据库层
为数据库中的OnlineURL字段创建唯一索引/约束将强制该字段是唯一的,无论系统/代码库引用它。这将导致应用程序在OnlineURL已存在的新记录插入时出错,或者将记录X更新为已由记录Y使用的OnlineURL。
申请层
OnlineURL已经存在的规则是什么?你拒绝这些数据吗?你更新匹配的行吗?也许您想利用一个存储过程来插入基于OnlineURL的新行或更新现有行。这会将2个查询过程转换为单个查询,这将对大规模插入产生影响
假设您的应用程序是串行的,并且唯一一个针对数据库的应用程序。您还可以保留OnlineURL的本地缓存以供循环使用,从数据库中读取列表一次,根据它检查每个传入记录,然后将您插入的每个新OnlineURL添加到列表中。读入初始列表只是一个查询,每次比较都在内存中完成。