Беспокойство по поводу масштабируемости нового сайта
-
13-09-2019 - |
Вопрос
Я создаю веб-приложение, которое обладает следующими характеристиками:
- В нем всего несколько страниц: главная страница, контакты, о программе, подписка и т.д.
- У каждого пользователя есть одна страница на основе jquery, которая позволяет им перетаскивать элементы DOM / drop / манипулировать ими.
- Когда пользователь заканчивает манипулировать элементами, он может нажать Сохранить, и элементы отправляются через JSON в PHP-скрипт на сервере.Они также могут загружать ранее сохраненный JSON.
Так что по сути:очень мало страниц, содержащих 90% статической информации.Одна страница с работой на стороне клиента и потенциально большим количеством получения / публикации JSON.
Я создал POC из этого, используя PHP / Smarty, jQuery и MySQL.Данные пользователя хранятся в MySQL, как и данные JSON.Веб-страницы кэшируются Smarty на диске.
Теперь я думаю о масштабируемости, и очевидный вопрос заключается в том, должен ли я хранить часто изменяемые данные JSON в MySQL или мне следует использовать MemcacheDB или какое-либо другое хранилище значений ключа?Выбрали бы вы простой вариант MySQL или внедрили хранилище ключ-значение сейчас или подождали бы, чтобы увидеть, возникнет ли проблема с масштабированием?Реально ли я когда-нибудь достигну точки, когда MySQL станет узким местом?
Для начала я планирую разместить это на Slicehost, а затем переместить, если потребуется.
Решение
Вопрос в том, будут ли какие-либо запросы, основанные на этих значениях, или нет?Будут ли обновления для определенных значений на уровне базы данных или нет...Сериализованные данные или json будут быстрее и эффективнее (с точки зрения хранения), если все, что вы делаете, это извлекаете всю строку целиком и не предъявляете требований к ее запросу или изменению.
Однако в зависимости от того, как вы масштабируете, вы можете захотеть сохранить структуру ключ / значение вместе с плоским представлением данных для целей поиска.
Также рассмотрите возможность использования apache AB для некоторого сравнительного анализа и получения идей о том, как ваши изменения влияют на ваш параллельный вывод.
Удачи :)
Другие советы
Что касается JSON, то это ничего не изменит:Я не понимаю, как вы можете оптимизировать хранение этих данных.Я думаю, вопрос сводится к тому, "Насколько сложны пользовательские данные?".Если существует огромный социальный граф, связанный с внешними ключами СУБД, и слишком сложно сопоставить эти данные с хранилищем ключ-значение, я бы предпочел не тратить на это усилия сейчас.Однако, если пользовательские данные - это просто информация плоского профиля, я бы предпочел перейти к хранилищу ключ-значение сейчас, чем позже, прежде чем использовать слишком много функций СУБД.