Как хранить данные большого размера в приложениях реального времени - PullRequest
0 голосов
/ 20 февраля 2019

Я работаю над совместным проектом холста в реальном времени, и в этом проекте пользователи могут создавать комнаты, а другие могут присоединяться к ним с определенным идентификатором и пропуском.мое приложение также поддерживает функцию нескольких вкладок, и я также использую fabric.js для обработки операций с холстом. Теперь я хочу сделать это приложение таким образом, чтобы, если пользователь отключился от комнаты из-за какой-то проблемы с Интернетом, после повторного подключения он мог продолжитьоттуда, где он ушел.Для этого мне нужно где-то хранить данные, я пытался сделать это с помощью mongoDB, но мои данные холста велики, например, 300 МБ или 500 МБ, и для их извлечения из 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 Ответ

0 голосов
/ 20 февраля 2019

Использование Redis

Redis - это хранилище структуры данных с открытым исходным кодом (лицензировано BSD), используемое в качестве базы данных, кэша иброкер сообщений.Он поддерживает структуры данных, такие как строки, хэши, списки, наборы, отсортированные наборы с запросами диапазона, растровые изображения, гиперлогоги, геопространственные индексы с запросами радиуса и потоками.Redis имеет встроенную репликацию, сценарии Lua, выселение LRU, транзакции и различные уровни персистентности на диске и обеспечивает высокую доступность через Redis Sentinel и автоматическое разбиение с помощью Redis Cluster.

Официальный Node.jsclient

Имеет несколько Node.js клиентских реализаций. Вот официально поддерживаемый

Примечание

Хотя Redis работает быстрее, чем MongoDb, это не решение всех проблем. Вы можете проверить эту тему в StackOverflow для сравнения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...