直接从API进行哈希处理(过滤,搜索等)或首先存储在数据库中?

时间:2018-05-02 20:09:22

标签: ruby-on-rails ruby postgresql

我开始处理从API返回的大数据。 API会在一个请求中返回数千行,如下所示:

"2000-01-06": {
        "1. open": "112.1900",
        "2. high": "113.8700",
        "3. low": "108.3700",
        "4. close": "110.0000",
        "5. volume": "27488300"
    },
    "2000-01-05": {
        "1. open": "111.1200",
        "2. high": "116.3700",
        "3. low": "109.3700",
        "4. close": "113.8100",
        "5. volume": "32029800"
    },
    "2000-01-04": {
        "1. open": "113.5600",
        "2. high": "117.1200",
        "3. low": "112.2500",
        "4. close": "112.6200",
        "5. volume": "27059500"
    },
    "2000-01-03": {
        "1. open": "117.3700",
        "2. high": "118.6200",
        "3. low": "112.0000",
        "4. close": "116.5600",
        "5. volume": "26614200"
    }

在下一步中,我想使用数据,过滤器,搜索,构建平均值等。将数据首先存储在我的数据库中并使用它直接使用或直接使用api中的哈希值是否聪明?我正在使用RoR和Postgres。

我的想法是将数据存储在关系数据库中,其中包含日期,开放,高等列。

1 个答案:

答案 0 :(得分:0)

这取决于您对数据做了什么。

  1. 如果数据经常在请求之间发生变化,您只需要在其上运行一次算法,只需在内存中执行: 当你从API中获取它时,它已经以高效格式(JSON)存储在内存中。 将其解析为ActiveRecord并存储到磁盘将会慢得多。

  2. 如果您想运行分析异步,或者由于某种原因需要对数据进行规范化,那么您需要对数据进行Objectify。它会变慢,但通常更容易解释(并自然地使用Ruby或SQL而不是混淆散列管理)

  3. 如果您以后需要访问它,请查看跳过ActiveRecord并保留数据库层以保持持久性。