下载功能最可扩展的方法是什么?
What can be most scable approach of download functionality?
我们目前正在开发考勤系统(基于 IN 和 OUT 日志),客户可以在其中下载其员工最近 6 个月的数据。当前,当数据集非常大时,我们面临着问题。目前我们使用 Mongo 作为我们的主要数据库来提供下载功能。获取和写入 excel 都是繁重的操作。
我知道解决这个问题的某些方法。我列出了所有这些,并希望您帮助我决定最具可扩展性的选项。
a) 增加服务器配置
b) 在单独的微服务中将整个数据以预处理格式移动到其他一些数据库(如弹性搜索)中。这将减少我的数据获取时间。
c) 因为在 excel 中写入 5 到 1000 万个条目的数据本身就是内存消耗过程。我们是否应该通过具有多个 pods Kubernetes 的队列(Kafka 或 rabbitmq)来实现 excel 中的数据写入,一次只有一个或有限数量的请求?
d) 选项 b 和选项 c 的组合。
请帮我解决你的建议,如果有其他可扩展的解决方案,请告诉我。
现在您正在使用 MongoDB
来获取和过滤数据,正如您所提到的,这些数据不是经过预处理的格式。
MongoDB 或其他基于文档的 NoSQL(如 DynamoDB)非常适合以非规范化格式存储数据,然后根据 id 或仅使用几个过滤器获取数据,即使为了高效过滤数据,也需要创建索引(类似于MySQL索引),这需要额外的space,默认情况下不缓存。
上面的很好的用途是在电子商务网站上显示产品详细信息页面,这些数据通常以规范化格式存储以支持 ACID,但也以 denormalized format in NoSQL
支持更快的读取,你不搜索,但仍然只能通过倒排索引在电子商务上进行搜索。
如果您在 elasticsearch 查询中使用过滤器,您可以获得过滤后的数据非常快 see the official doc for filter context
Frequently used filters will be cached automatically by Elasticsearch,
to speed up performance.
这就解决了你一百万个文档的问题,然后你已经提到了,你应该使用排队机制来写入这个巨大的数据,Kafka 非常很受欢迎,非常适合这个用例。
P.S:- 无需增加服务器配置,正确的设计会解决问题,增加硬件只是治标不治本。
我们目前正在开发考勤系统(基于 IN 和 OUT 日志),客户可以在其中下载其员工最近 6 个月的数据。当前,当数据集非常大时,我们面临着问题。目前我们使用 Mongo 作为我们的主要数据库来提供下载功能。获取和写入 excel 都是繁重的操作。 我知道解决这个问题的某些方法。我列出了所有这些,并希望您帮助我决定最具可扩展性的选项。
a) 增加服务器配置
b) 在单独的微服务中将整个数据以预处理格式移动到其他一些数据库(如弹性搜索)中。这将减少我的数据获取时间。
c) 因为在 excel 中写入 5 到 1000 万个条目的数据本身就是内存消耗过程。我们是否应该通过具有多个 pods Kubernetes 的队列(Kafka 或 rabbitmq)来实现 excel 中的数据写入,一次只有一个或有限数量的请求?
d) 选项 b 和选项 c 的组合。
请帮我解决你的建议,如果有其他可扩展的解决方案,请告诉我。
现在您正在使用 MongoDB
来获取和过滤数据,正如您所提到的,这些数据不是经过预处理的格式。
MongoDB 或其他基于文档的 NoSQL(如 DynamoDB)非常适合以非规范化格式存储数据,然后根据 id 或仅使用几个过滤器获取数据,即使为了高效过滤数据,也需要创建索引(类似于MySQL索引),这需要额外的space,默认情况下不缓存。
上面的很好的用途是在电子商务网站上显示产品详细信息页面,这些数据通常以规范化格式存储以支持 ACID,但也以 denormalized format in NoSQL
支持更快的读取,你不搜索,但仍然只能通过倒排索引在电子商务上进行搜索。
如果您在 elasticsearch 查询中使用过滤器,您可以获得过滤后的数据非常快 see the official doc for filter context
Frequently used filters will be cached automatically by Elasticsearch, to speed up performance.
这就解决了你一百万个文档的问题,然后你已经提到了,你应该使用排队机制来写入这个巨大的数据,Kafka 非常很受欢迎,非常适合这个用例。
P.S:- 无需增加服务器配置,正确的设计会解决问题,增加硬件只是治标不治本。