如何在实时应用程序中存储大量数据
Posted
技术标签:
【中文标题】如何在实时应用程序中存储大量数据【英文标题】:How to store large size data in real time applications 【发布时间】:2019-07-13 17:47:06 【问题描述】:我正在做一个实时协作画布项目,在这个项目中,用户可以创建房间,其他人可以通过一些 id 和 pass 加入他们。我的应用程序还支持多个选项卡功能,并且我也在使用fabric.js 来处理画布操作现在我想以这样一种方式制作这个应用程序,即如果用户由于某些互联网问题而与房间断开连接,那么在重新连接后他可以继续从他离开的地方。为此,我需要将数据存储在某个地方,我尝试使用 mongoDB 来完成,但我的画布数据很大,例如 300mb 或 500mb,并且从 mongoDB 获取它需要太多时间,因此应用程序的性能非常差。撤消、打开新标签等每个操作都很慢。所以,我想知道在这种情况下我应该如何管理数据。
这是我的 fabric.js 对象:
"\"version\":\"2.4.4\",\"objects\":[\"type\":\"path\",\"version\":\"2.4.4\",\"originX\":\"left\",\"originY\":\"top\",\"left\":94,\"top\":89.17157287525382,\"width\":4,\"height\":23.83,\"fill\":null,\"stroke\":\"black\",\"strokeWidth\":2,\"strokeDashArray\":null,\"strokeLineCap\":\"round\",\"strokeDashOffset\":0,\"strokeLineJoin\":\"round\",\"strokeMiterLimit\":10,\"scaleX\":1,\"scaleY\":1,\"angle\":0,\"flipX\":false,\"flipY\":false,\"opacity\":1,\"shadow\":null,\"visible\":true,\"clipTo\":null,\"backgroundColor\":\"\",\"fillRule\":\"nonzero\",\"paintFirst\":\"fill\",\"globalCompositeOperation\":\"source-over\",\"transformMatrix\":null,\"skewX\":0,\"skewY\":0,\"path\":[[\"M\",97.998,100],[\"Q\",98,100,98.5,100],[\"Q\",99,100,99,99],[\"Q\",99,98,99,97],[\"Q\",99,96,99,95],[\"Q\",99,94,99,93],[\"Q\",99,92,99,91.5],[\"Q\",99,91,99,90.5],[\"Q\",99,90,98.5,91],[\"Q\",98,92,98,93.5],[\"Q\",98,95,98,97],[\"Q\",98,99,97.5,100.5],[\"Q\",97,102,97,104.5],[\"Q\",97,107,97,108.5],[\"Q\",97,110,96.5,111],[\"Q\",96,112,96,112.5],[\"Q\",96,113,95.5,113],[\"Q\",95,113,95,113.5],[\"L\",95,114.002]]]"
这只是一个显示当前状态的对象,就像这样,我的数据库中有很多对象也可以存储以前的状态。因为这是实时应用程序,所以我想尽量减少延迟,所以我需要更快的方法。
我正在使用 nodeJs 和 socket.io。
谢谢
【问题讨论】:
【参考方案1】:使用 Redis
Redis 是一个开源(BSD 许可)的内存数据结构存储,用作数据库、缓存和消息代理。它支持数据结构,例如字符串、散列、列表、集合、具有范围查询的排序集合、位图、超日志、具有半径查询和流的地理空间索引。 Redis 具有内置复制、Lua 脚本、LRU 驱逐、事务和不同级别的磁盘持久性,并通过 Redis Sentinel 和 Redis Cluster 自动分区提供高可用性。
Node.js 官方客户端
它有多个Node.js
客户端实现。 Here's the officially supported one
注意
虽然 Redis 比 MongoDb 更快,但它并不能解决所有问题。 You can check out this thread on *** for a comparison
【讨论】:
我可以用它来存储大数据还是有任何数据限制 @faizKhan 它可以存储非常大的数据。您最多可以达到 每个项目 1GB,而这只是一个项目。基本上限制是您的计算机/服务器 我的荣幸!不要忘记投票并接受这个答案@faizKhan。干杯 是的,我会做的以上是关于如何在实时应用程序中存储大量数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在Ubuntu 18.04上安装Elasticsearch
从浏览器手动将图像存储在 Firebase 存储中。如何使其反映在实时数据库中。这样我就可以在 Android 应用程序中获取