Лучший способ хранить сложные отношения огромного количества данных php / mysql - PullRequest
0 голосов
/ 29 сентября 2010

Я пытаюсь разработать веб-приложение для управления цифровыми активами. Я планирую сделать это в Codeigniter с MySQL как DB. Это для популярной региональной газеты. Они будут иметь 1000 записей и данных о туберкулезе, так как будут ежедневно вводиться тонны информации.

Будут разные типы контента, такие как Медиа, Личность, Событие, Выпуск, Разное и т. Д. Все это будет классифицировано. Дело в том, что все будет взаимосвязано. Например, мероприятие «Олимпийские игры» будет связано со всеми участниками таблицы личностей и всеми СМИ, связанными с этим. Я планирую реализовать эту сложную взаимосвязь, используя таблицу «соединения»

id  -   subject   -  connection   - type 
-------------------------------------------
 1         98           190         media
 2         283          992         issue 
 3         498          130         info

Таким образом, когда человек принимает участие в олимпийских соревнованиях ... все соединения будут заполнены из этой таблицы. Столбец 'subject' будет иметь идентификатор 'olympics', а соединение будет иметь идентификатор подключенной записи.

Есть ли лучший способ сделать это? Контент нужно искать на основе сотен различных критериев. Но конечных пользователей будет очень меньше. Только репортеры газеты (максимум 100) будут иметь доступ к этому приложению, поэтому трафик или нагрузка будут очень меньше, но объем хранимой информации будет очень высоким. Я хотел бы услышать от опытных разработчиков, так как у меня нет большого опыта в создании чего-то такого большого.

1 Ответ

3 голосов
/ 29 сентября 2010

Это сложный вопрос, так как вам нужно много знать о настройке и настройке базы данных MySQL, чтобы справиться как с нагрузкой, так и с данными. С таким небольшим количеством пользователей у вас все будет в порядке с точки зрения соединений, поэтому время выполнения является настоящим узким местом.

Если вы работаете на 32-битном сервере, максимальное количество строк в таблице составляет 4,2 миллиарда и 4 ГБ без каких-либо изменений конфигурации. Вы можете увеличить ограничение таблицы в 4 ГБ, но, насколько я знаю, ограничение на 4,2 миллиарда строк является максимальным для 32-разрядного сервера.

Ваша таблица выглядит нормально, но я бы изменил "тип" на ENUM, чтобы данные не были текстовыми (уменьшает общий размер таблицы).

Вам нужно будет правильно проиндексировать эту таблицу, и, исходя из того, как она выглядит по теме, введите. Без сложного запроса чисел / примеров с объединениями было бы трудно угадать, как быстро будет выполняться этот запрос, но если он правильно проиндексирован и имеет большую мощность, у вас все будет в порядке.

Вы всегда можете добавить слой Memcache между PHP и MySQL, чтобы кэшировать некоторые результаты, чтобы вы могли получить лучшую производительность, если они выполняют похожие поиски. С «сотнями разных критериев», однако, вы, скорее всего, попадете в базу данных совсем немного.

Наоборот, вы также можете взглянуть на некоторые опции NoSQL, такие как MongoDB, которые могут лучше подходить в зависимости от ваших данных.

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