使用临时文件进行查找?

时间:2015-08-06 13:08:19

标签: c# amazon-web-services lookup

我有一个在EC2云服务器上执行并连接到RDS SQL DB的C#程序。它收集一些数据,检查该数据是否存在SQL DB表,如果不存在,则将该项添加到列表中以便稍后批量保存。现在,我正在努力解决最好的方法。

到目前为止,我已尝试过这些选项:
a)在插入之前使数据库进行调用以查看它是否存在。 专业:内存密集程度较低。可以在更便宜的云服务器上运行。 缺点:更高的DB读数。表现较慢
b)在表上放置一个唯一约束,并在代码中捕获此唯一约束异常并继续。 专业:内存密集程度较低。可以在更便宜的云服务器上运行。 缺点:更高的DB读数。表现更慢。事务的Id增量不会回滚,从而导致出现int Id列的错误 c)在开始时,对所有查找值进行批量SQL调用,并将它们全部放入散列集中。引用此散列设置以查看值是否存在。 亲:快得多。更少的数据库读取 缺点:为内存更多的服务器支付更多费用。风险因内容错误而缩小。

我说单个SQL调用的原因很慢是因为RDS DB的延迟。这是次要的,但是当连续进行100k调用以查看是否存在某些内容时会增加。理想情况下,我希望尽可能快的性能。我考虑过使用DyanmoDb,但价格太高,在我的情况下没有多大意义。

那么有没有办法将查找保存到本地磁盘上的文件中,以后可以快速引用? 请告诉我它是什么!

1 个答案:

答案 0 :(得分:0)

您可以尝试的一个快速选项是编写一个接受插入数据的存储过程,然后sp将检查记录,如果没有找到则添加它,或者返回错误。

不会减少读取或写入,但会减少到服务器的往返次数,并且您确实说延迟是一个问题。

另一种选择是使用临时表并在不进行检查(快速)的情况下插入其中,然后执行"插入到可弹性的select * from temptable中,其中记录不可记录的'将行作为批处理插入的查询类型 - 此选项的用处取决于您是否可以将一堆行组合在一起进行插入。