#node.js #json #discord #fs #discord.js
#node.js #json #Discord #fs #discord.js
Вопрос:
Я создаю discord-бота, который ставит в очередь двух человек для игры, он выполняет это, указывая их идентификатор discord, статус очереди, оппонента в файле JSON. Выглядит следующим образом для каждого пользователя:
{
"discordId": "296062947329966080",
"dateAdded": "2019-03-11T02:34:01.303Z",
"queueStatus": "notQueuing",
"opponent": null
},
Когда один пользователь встает в очередь с помощью команды, он устанавливает «queueStatus» в очередь, а когда другой пользователь находится в очереди, он устанавливает оппонента этому человеку и сообщает обоим пользователям, что они оппоненты. Проблема в том, что случайно файл JSON будет поврежден при изменении, и что-то подобное произойдет с нижней частью:
"dateAdded": "2019-03-11T02:34:01.303Z",
"queueStatus": "notQueuing",
"opponent": null
}
]
}537"
}
]
}
Моя единственная идея заключается в том, что это потому, что два человека, выполняющих это одновременно, одновременно записывают в файл и повреждают его, и это fs.writeFileSync
исправило бы это, но если я использую fs.writeFileSync
всю остальную часть discord, бот приостанавливается и перестает работать, пока не закончит запись, что не очень практичное решение.
Ответ №1:
Данные, хранящиеся в файле JSON, должны быть перенесены в MongoDB
или другую базу данных. Операции CRUD с одним статическим файлом из нескольких заданий / источников не являются масштабируемым решением. Перенос этого хранилища данных в базу данных устранит эти задержки.
Проверьте это видео на Youtube с помощью freecodecamp.org
Однако, если файл JSON требуется или все еще предпочтителен, я бы рекомендовал использовать EventEmitter
для создания единой очереди блокировки для чтения и записи.
Комментарии:
1. Хотя я согласен с ответом, не является ли MongoDB здесь немного излишним?