什么是最可行的下载功能方法?

时间:2020-04-10 11:39:42

标签: mongoose rabbitmq bigdata kafka-consumer-api kafka-producer-api

我们目前正在开发出勤系统(基于IN和OUT日志),客户可以在该系统上下载其雇员最近​​6个月的数据。当前,当数据集很大时,我们将面临问题。当前,我们使用Mongo作为我们的主要数据库来提供下载功能。将其提取并写入excel都是繁重的操作。 我知道解决此问题的某些方法。我列出了所有这些内容,并希望您能帮助我确定最可扩展的选项。

a)增加服务器配置。

b)将整个数据以预处理的格式移动到其他微服务中的某些其他数据库中(例如弹性搜索)。这将减少我的数据获取时间。

c)由于在excel中写入5到1000万个条目本身就是消耗内存的过程。我们是否应该通过具有多个Kubernetes Pod的队列(Kafka或rabbitmq)一次在Excel中实现数据写入?

d)选项b和选项c的组合。

请帮我解决您的建议,并让我知道是否还有其他可扩展的解决方案。

1 个答案:

答案 0 :(得分:1)

现在,您正在使用MongoDB来获取和过滤数据,正如您提到的那样,这些数据不是经过预处理的格式。

MongoDB或其他基于文档的NoSQL(例如DynamoDB)在以非规范化格式存储数据然后基于id或仅使用几个过滤器获取数据时非常有用,即使是为了高效过滤数据,您需要创建索引(类似于MySQL索引),这会占用额外的空间,并且默认情况下不会缓存这些空间。

上面的用法很好地显示了电子商务网站上的“产品详细信息”页面,这些数据通常以规范化格式存储以支持ACID,然后以denormalized format in NoSQL格式存储以支持更快的读取,而您在这里t搜索,但仍然仅通过倒排索引on进行电子商务搜索。

如果您在Elasticsearch查询中使用过滤器,则可以非常快速地获取过滤数据 see the official doc for filter context

Elasticsearch将自动缓存常用的过滤器, 加快性能。

这将解决您获取一百万个文档的问题,此后,正如您已经提到的,您应该使用排队机制来写入大量数据,Kafka非常受欢迎并且适合于此完美的用例。

PS:-无需增加服务器配置,正确的设计将解决问题,而增加更多的硬件只是在解决症状而不是根本原因。

相关问题