代码之家  ›  专栏  ›  技术社区  ›  sventevit

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

  •  0
  • sventevit  · 技术社区  · 15 年前

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

    我需要编写一个应用程序,它监听COM端口并将传入的数据保存到数据库中。主要功能:保存输入数据(13位数字的序列号),如果这个数字已经存在,则将其标记为双精度。例如,数据库中可能有这些记录:

    000000000001好
    000000000002好
    000000000002双
    000000000003好
    000000000004好

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

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

    谢谢

    7 回复  |  直到 14 年前
        1
  •  3
  •   Bevan    15 年前

    您所追求的性能水平不会对任何数据库系统造成严重的影响。

    Microsoft SQL Server、Oracle、Informix、MySQL、Postgres、Sybase都可以轻松处理这种情况。

    关键是要设计好数据库和内存结构。

    Naive方法会很快失败-但是一些智能设计(使用正确的表结构、索引和查询)会很好地工作。

    现在,如果你想在 第二 那你就是在说挑战。

        2
  •  3
  •   Hellfrost    15 年前

    你不需要数据库,你需要一个哈希表。 您也可以使用排序树,它将更节省空间。 关于SQL Server,您不会害怕每分钟100长的SQL…

        3
  •  1
  •   Guss    15 年前

    我认为在合适的硬件上,任何数据库服务器都可以每分钟处理100个更新(少于每秒2个更新)。

    我建议使用MySQL,因为它支持原子更新,排除了使用事务处理的需求,因为“检查是否存在,然后更新”是您需要的。例如:

    INSERT INTO data (number, status) VALUES ('00000001', 'OK') ON DUPLICATE KEY UPDATE status = 'DOUBLE';
    

    还有其他的SQL服务器支持这个特性,所以最好的建议是使用您知道的内容(不要忘记在数字列上放置一个唯一的索引)。

        4
  •  1
  •   Moayad Mardini    15 年前

    如果你相信(我不相信!)如果操作太快,普通数据库无法使用,则可以使用 IMDB (内存数据库),比如:

        5
  •  0
  •   Tomas Aschan    15 年前

    在我看来,您需要保留数据的内存表示(即,编写包含它的类),并更新/检查内存表示,而不是针对“真实”数据库。

    如果需要长期存储数据,可以定期批量保存,最好是在从COM端口流入新数据的中断期间进行,但如果不会发生这种情况,可能只是使用一个单独的线程,在原始线程不断收集新数据的同时,将数据保存到DB。

        6
  •  0
  •   ericp    15 年前

    我同意贝凡的观点。

    进一步考虑:

    • 使用存储过程以优化SQL。
    • 使用准备好的语句。
    • 你什么时候从数据库中读取数据?您可以从插入开始,然后添加功能(报告?等)为了阅读,你将开始处理锁,如果你不打算这样做的话,锁会破坏你的性能。
        7
  •  0
  •   Community Bayu Bramantya    7 年前

    如果您只需要一个键值对,那么为什么不查看分布式缓存呢?

    Velocity 或者其中之一 .net memcache 港口应该运作良好。这种方法的优点是,如果您的需求扩大,它可以扩展,并且不需要数据库服务器安装/维护或许可成本。