我有一个网络抓取应用程序。用户启动“报告” - 他们想要抓取哪些数据点。数据点可以是1或100K数据点。有许多用户发起这些报告。有多个爬网服务器在抓取数据点。然后将这些数据点发送到中央服务器。中央服务器收集所有数据点,并且当收集报告的所有(足够)数据点时,生成报告(excel)并将其传递给客户端。
现在我们需要一个数据存储来存储抓取时的各个数据点。然后,当爬网完成时,我们需要查询所有这些数据点并构建报告。该报告是最终产品,生成报告后,我们无需存储已爬网的数据;至少不是为了满足客户需求。附注:已爬网的数据存档到数据仓库中。
目前,我们使用SQL存储这些抓取数据点,因为正在进行抓取。过程是:将所有crwaling数据转储到SQL中 - >爬网完成后(可能需要几个小时),从SQL回读属于报告的爬网数据 - >定期清除SQL,例如清除超过x天的数据。 SQL服务器遇到了可伸缩性问题 - 爬行数据点太多。我们每天获得大约100M的数据点;每个记录只有几KB。这样每天大约有400 GB的数据。
所以我们正在探索几种替代方案,对这些做出一些评论会很有帮助:
答案 0 :(得分:0)
您可以将数据存储在Cassandra中,然后将数据ETL到Redshift并构建针对Redshift的报告应用程序。这样,您可以确保在摄取数据时没有单点故障,并且您还可以灵活地通过ETL格式化或转置数据。
谢谢, Jayadeep