.NET或MySql或其他解决方案,每天进行数百万次查找(停止重复)

时间:2011-09-02 00:35:20

标签: c# .net mysql dictionary indexing

我有一个用.NET编写的客户端/服务器架构,其中有数百个客户端将数据发送到一台服务器。每个项目都有一个ID,不同的客户端可以多次发送相同的ID。

ID是长的,服务器需要知道它是否已收到具有相同ID的内容。每天服务器将获得大约10,000,000个ID,其中包含大约1,000,000个重复项。每当它收到一个id时,它将需要进行某种查找以查看它是否已经被处理过。几天后,极不可能获得重复的ID。

我目前的解决方案是:

  • 在具有后台线程的ID的内存字典中,删除任何在字典中超过3天后的项目。

  • MySql数据库,其中包含一个用于ID的索引列和一个用于插入日期的列。

我认为的问题是查询对MySql数据库的速度有多快,因为我每天要做10,000,000次查询。我不打算在这个特定问题(典型的开发系统)中使用花哨的硬件,并且不想100%征税。 内存解决方案的问题在于编写后台工作程序(并发)会很麻烦,并且一切都会在不太可能但可能发生的崩溃中丢失。

2 个答案:

答案 0 :(得分:0)

不确定MySQL部分 - 通常它可以使用您使用的硬件进行扩展......

对于Dictionary部分,只需使用ConcurrentDictionary - 这是线程安全且非常快,因为大多数操作都是无锁实现的。

答案 1 :(得分:0)

您可以尝试key value store

删除过时密钥(ID)的性能可能是一个问题,因为您需要查找每个值(插入日期),但它应该很容易测试。如果您需要在商店和服务器之间建立缓存,那么测试也应该非常简单。

除了上面链接中的项目,您可以考虑Berkeley DB,它有一个C#API并包含一个内存缓存。