我在Visual Studio 2005,.NET 2.0中工作。
我需要编写一个应用程序,它侦听COM端口并将传入的数据保存到数据库中。主要功能:保存传入数据(13位数字序列),如果此数字已经存在,则将其标记为double。例如,数据库中可能存在以下记录:
0000000000001 OK
0000000000002 OK
0000000000002双
0000000000003 OK
0000000000004确定
我可以使用SQL数据库,但我不知道它是否足够快......数据库应该能够存储多达10.000.000条记录,每分钟最多可写入100条记录(因此需要检查100条记录)如果此记录已经存在,则每分钟的时间。)
我应该使用哪个数据库?也许整个数据库都需要在RAM中。我在哪里可以了解更多相关信息?
由于
答案 0 :(得分:3)
您所瞄准的性能水平不会严重影响任何数据库系统。
Microsoft SQL Server,Oracle,Informix,MySQL,Postgres,Sybase都可以轻松应对这种情况。
关键是要很好地设计数据库和内存结构。
一种直接的方法会很快失败 - 但是一些聪明的设计(使用正确的表结构,索引和查询)将会很好地运作。
现在,如果您想要每秒提交100条记录,那么您将面临挑战。
答案 1 :(得分:3)
您不需要数据库,需要哈希表。 你也可以使用一个排序树,它将更节省空间。 关于sql服务器,你并不是每分钟都有100分长的恐惧......
答案 2 :(得分:1)
如果你相信(我没有!)操作对于普通DB来说太快了,你可以使用IMDB(内存数据库),例如:
答案 3 :(得分:1)
我认为在合适的硬件上,任何数据库服务器都能够每分钟处理100次更新(每秒少于2次更新)。
我建议使用MySQL,因为它支持原子更新,这些更新排除了使用事务进行“检查是否存在然后更新”所需的要求。例如:
INSERT INTO data (number, status) VALUES ('00000001', 'OK') ON DUPLICATE KEY UPDATE status = 'DOUBLE';
还有其他SQL服务器支持此功能,因此最好的建议是使用您所知道的(并且不要忘记在数字列上添加唯一索引)。
答案 4 :(得分:0)
在我看来,您需要保留数据的内存表示形式(即包含它的写入类),并更新/检查内存中的表示,而不是“实际”数据库。 / p>
如果您需要长期存储数据,您可以定期批量保存,最好是在从COM端口流入新数据的中断期间,但如果不会发生这种情况,可能只需要一个单独的线程当原始线程不断收集新数据时,这会将内容保存到数据库中。
答案 5 :(得分:0)
如果您只需要一个键值对,那么为什么不查看分布式缓存?
Velocity或其中一个.net memcache端口应该可以正常运行。这种方法的优点是,如果您的需求扩展,它将扩展,并且没有数据库服务器设置/维护或许可成本。
答案 6 :(得分:0)
我同意Bevan。
进一步考虑: