2016-07-15 86 views
0

我有一个网络抓取应用程序。用户发起“报告” - 他们想要抓取哪些数据点。数据点可以少至1个或100K个数据点。有很多用户启动这些报告。有多个爬网服务器爬取数据点。这些数据点然后被发送到中央服务器。中央服务器收集所有数据点,并在收集报告的所有(足够)数据点时,生成报告(excel)并将其发送给客户端。临时数据存储设计

现在我们需要一个数据存储来存储抓取的各个数据点。然后,当抓取完成后,我们需要查询所有这些数据点并构建报告。该报告是最终产品,一旦生成报告,我们不需要存储抓取的数据;至少不是为了满足客户的需求。附注:抓取的数据被存档到数据仓库中。

当前我们使用SQL来存储抓取过程中的这些抓取数据点。处理过程是:将所有破坏性数据转储到SQL中 - >当抓取完成后,可能需要几小时时间,从SQL读回属于报告的抓取数据 - >定期清除SQL,比如清除x之前的清除数据的日子。 SQL服务器遇到可伸缩性问题 - 抓取数据点过多。我们每天获得约1亿个数据点;每KB的纪录。所以这是每天大约400 GB的数据。在本地CSV文件

  1. 商店抓取数据:

    所以我们正在探索多种选择,这将是有帮助的得到这些的一些意见。抓取完成后,请读取 备份CSV文件以生成报告。缺点是 会造成单点故障;数据存储在其上的服务器可能会关闭,并使用 它已经抓取的数据。

  2. 将SQL替换为其中一种大数据技术;将数据抓取到以下其中一个中
    • AWS RedShift:生成报告时查询报告数据非常简单。我倾向于此。
    • 大表格:插入很容易;但假设它是一个关键值存储, 在生成报告的时候,从DB获取100K左右的单个记录到 有多容易?
    • DynamoDB
  3. 存储的数据抓取到一些文件服务器

回答

0

可以存储在卡珊德拉的数据,然后ETL的数据红移和建立对红移报告应用程序中的文件。这样,您可以确保在摄取数据时不会出现单点故障,并且还可以灵活地通过ETL格式化或转置数据。

谢谢, Jayadeep