我应该使用哪个数据库以获得最佳性能

时间:2009-09-05 10:33:44

标签: database-design visual-studio-2005

我在Visual Studio 2005,.NET 2.0中工作。

我需要编写一个应用程序,它侦听COM端口并将传入的数据保存到数据库中。主要功能:保存传入数据(13位数字序列),如果此数字已经存在,则将其标记为double。例如,数据库中可能存在以下记录:

0000000000001 OK
0000000000002 OK
0000000000002双
0000000000003 OK
0000000000004确定

我可以使用SQL数据库,但我不知道它是否足够快......数据库应该能够存储多达10.000.000条记录,每分钟最多可写入100条记录(因此需要检查100条记录)如果此记录已经存在,则每分钟的时间。)

我应该使用哪个数据库?也许整个数据库都需要在RAM中。我在哪里可以了解更多相关信息?

由于

7 个答案:

答案 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。

进一步考虑:

  • 使用存储过程以优化sql。
  • 使用准备好的陈述。
  • 您何时从数据库中读取?您可以从插入开始,然后添加功能(报告等等)进行阅读,然后您将开始处理锁定,如果您不计划锁定,可能会导致性能下降。