我已经被困在 MsSql/MySql 的世界里好几年了,我决定把我的翅膀展得更远一些。目前我正在研究哪种 DBMS 擅长归档数据时所需的功能。例如。大量写入和少量读取。

我见过 NoSQL 运动,但我有一个非常 RDBMS 的心态,所以我有点怀疑。

有人有什么建议吗?或者甚至是任何指向此类内容的基准等的指针。

谢谢:)托马斯


编辑

既然有问题,我会尝试提供更多关于我的想法的信息

我将在多台服务器上运行一项服务,这些服务器都有本地数据库。这些数据库将有大量的点击(1/1 读/写),因此我尝试将它们尽可能保持为空,以减少查询时间。我的初步估计是没有行在该数据库中停留的时间不会超过 30 分钟。在每个服务上运行存档数据库似乎是一种资源浪费,因此中央存档架构看起来更好。

我会尝试建立一个快速的 ASCII 网络架构

     ___________    ___________    ___________
    | service 1 |  | service 2 |  | service 3 |
     -----------    -----------    -----------
          |____________|_______________|
                   ____|____
                  | Archive |
                   ---------

正如您可能知道的,MsSQL 和 MySQL 仅在处理写入时垂直扩展(不确定这是否是 RDBMS 的事情)。因此,我正在寻求尽可能充分利用存档 DBMS 的性能。

有帮助吗?

解决方案

如果您要归档的数据结构相对简单,您可以考虑直接归档到平面文件。适合写作,不太适合阅读。这个问题中有一些关于这个主题的讨论: 平面文件数据库好吗?

否则,我会坚持使用 MySql 并确保它针对高写入/低读取使用情况进行了适当调整。

其他提示

所以我试图让它们尽可能为空以减少查询时间

首先,查询速度与数据库大小不成正比,除非您只进行全表扫描。唯一索引查找与索引的深度成正比。从索引根块分裂到下一次分裂可能会增加数百万行。事实上,删除行以保持数据库“尽可能为空”可能实际上不会使数据库变得更小。在重建索引之前,您可能会拥有非常稀疏的分支和叶子块,从而使索引扫描花费的时间越来越长。

我不确定 MSSQL 或 MYSQL 如何填充部分空白页面,但您可能根本看不到删除带来的任何空间节省。

在 Oracle 中,我建议进行分区并删除删除,以实际保持数据库一定的大小。

但我说这一切是为了鼓励您在服务器使用中使用内存数据库,而不是专注于存档使用。在这种情况下,您没有说任何让我认为 RDBMS 不是归档的最佳解决方案的内容。

Oracle 或 PostGresSQL 也是非常强大的 DBMS。但如果您已经了解并使用过 MySQL,为什么要改变呢?MySQL 是免费的、高性能的、文档齐全的......

但是,如果您主要进行写入操作而不是大量读取,并且您不再需要常用的 DBMS,那么您可能会考虑基于文档的 DBMS

我建议你看一下 存在数据库蒙戈数据库

希望这可以帮助!

您可以通过此查看不同数据库的读/写性能结果 数据库基准软件 (GNU GPL)那是合适的找到一些答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top