什么是适合归档的 DBMS?
-
24-10-2019 - |
题
我已经被困在 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 不是归档的最佳解决方案的内容。
您可以通过此查看不同数据库的读/写性能结果 数据库基准软件 (GNU GPL)那是合适的找到一些答案。