Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
适合我的应用程序类型的最佳数据库?MySQL?MongoDB?PostgreSQL?CouchDB?_Mysql_Node.js_Mongodb_Postgresql_Redis - Fatal编程技术网

适合我的应用程序类型的最佳数据库?MySQL?MongoDB?PostgreSQL?CouchDB?

适合我的应用程序类型的最佳数据库?MySQL?MongoDB?PostgreSQL?CouchDB?,mysql,node.js,mongodb,postgresql,redis,Mysql,Node.js,Mongodb,Postgresql,Redis,我目前正在编写一个应用程序,我必须存储大量的数据。我的应用程序是用Node.js和im编写的,使用集群和异步模块来利用我的整个系统 以下是我的应用程序和我使用的环境的一些属性: 工作站: CPU:3.5 GHz的6核 内存:16 GB Nodejs:最新版本 当前数据库:MySQL 操作系统:Windows 10 应用程序: 目前正在使用6个工人,每个工人占用0.1%的CPU和80 MB的RAM 通过JSON格式的RPC调用获取数据库的数据 数据: 区块(目前约376000个区块)每1

我目前正在编写一个应用程序,我必须存储大量的数据。我的应用程序是用Node.js和im编写的,使用集群和异步模块来利用我的整个系统

以下是我的应用程序和我使用的环境的一些属性:

工作站:

  • CPU:3.5 GHz的6核
  • 内存:16 GB
  • Nodejs:最新版本
  • 当前数据库:MySQL
  • 操作系统:Windows 10
应用程序:

  • 目前正在使用6个工人,每个工人占用0.1%的CPU和80 MB的RAM
  • 通过JSON格式的RPC调用获取数据库的数据
数据:

  • 区块(目前约376000个区块)每10分钟增加一个。一个块的示例数据:
    {
    “散列”:“000000000 FE549A89848C76070D4132872CFB6EFE5315D01D7EF77E4900F2D39”,
    “确认书”:88029,
    “尺寸”:189,
    “高度”:227252,
    “版本”:2,
    “merkleroot”:“C738FB8E22750B6D3511ED0049A96558B0BC57046F3F7771EC825B22D6A6F4A”,
    “tx”:[
    “C738FB8E22750B6D3511ED0049A96558B0BC57046F3F7771EC825B22D6A6F4A”
    ],
    “时间”:1398824312,
    “暂时”:1883462912,
    “位”:“1D000FFFF”,
    “难度”:1.00000000,
    “链工程”:“00000000000000000000000000000000000000000083ADA4009841A”,
    “以前的区块哈希”:“00000000 C7F490E6EBF7AD7E21A47131DFEB22C759505B3998D7A814C011DF”,
    “nextblockhash”:“00000000 AFE1928529AC766F1237657819A11CCFCC8CA6D67F119E868ED5B6188”
    
    }
    当事物之间存在大量关系时,关系数据库非常有用,尤其是当您在查询时需要遍历这些关系时。例如,您可以有一组客户,每个客户都有多个订单,这些订单都来自不同地点的供应商;您可能希望查询在特定位置至少有五个供应商订单的所有客户。或者,您可能想知道供应商的订单总数,按位置分组。关系数据库在这方面非常出色

    你的数据确实有关系,是的。然而,听起来您似乎并不打算尝试遍历它们或对它们进行大量聚合,而且您的数据一旦存储,即使发生更改也很少。在我看来,文件商店更适合你

    在您列出的数据库中,MongoDB和Redis可以被视为文档存储。你说你只有512MB的内存;Redis喜欢将其所有数据存储在RAM中,事后将其放到磁盘上,这就取消了Redis的资格。我不确定MongoDB试图达到什么样的平衡,但我相信,虽然它在某种程度上自由地使用RAM,但它最终还是会尝试将它放到磁盘上。(有些人嘲笑它,说它不太注重持久性。它看起来像是在存储公开可用的数据,所以如果丢失了一些最近写入的数据,这应该不是什么大问题,你可以从公共来源重新填充它。)


    在评论中,您指出您通常会查询块中的所有事务。MongoDB应该能够轻松地处理该用例。您需要确保的唯一一件事是在块ID列(字段?我不确定MongoDB如何调用它们)上创建一个索引,这应该允许高效地执行此类查询。

    当事物之间存在大量关系时,关系数据库非常有用,尤其是当您在查询时需要遍历这些关系时。例如,您可以有一组客户,每个客户都有多个订单,这些订单都来自不同地点的供应商;您可能希望查询在特定位置至少有五个供应商订单的所有客户。或者,您可能想知道供应商的订单总数,按位置分组。关系数据库在这方面非常出色

    你的数据确实有关系,是的。然而,听起来您似乎并不打算尝试遍历它们或对它们进行大量聚合,而且您的数据一旦存储,即使发生更改也很少。在我看来,文件商店更适合你

    在您列出的数据库中,MongoDB和Redis可以被视为文档存储。你说你只有512MB的内存;Redis喜欢将其所有数据存储在RAM中,事后将其放到磁盘上,这就取消了Redis的资格。我不确定MongoDB试图达到什么样的平衡,但我相信,虽然它在某种程度上自由地使用RAM,但它最终还是会尝试将它放到磁盘上。(有些人嘲笑它,说它不太注重持久性。它看起来像是在存储公开可用的数据,所以如果丢失了一些最近写入的数据,这应该不是什么大问题,你可以从公共来源重新填充它。)


    在评论中,您指出您通常会查询块中的所有事务。MongoDB应该能够轻松地处理该用例。您需要确保的唯一一件事是在块ID列(字段?我不确定MongoDB如何调用它们)上创建一个索引,这样可以有效地执行此类查询。

    因为数据在写入后看起来基本上是不可变的,而且,因为有一个清晰的索引,您可能不需要对其进行非常复杂的查询,我认为文档存储适合您的情况,而像MySQL或PostgreSQL这样的关系数据库可能会有些过分。在您列出的选项中,MongoDB和Redis符合文档存储的要求,但Redis不合适,因为它喜欢将数据保存在RAM中,而您的内存不足。疗法