
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
۩
Дата
|
![]() Абориген ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 229 Пользователь №: 38653 На форуме: Карма: ![]() |
Всем привет. Всех с наступившим.
Вопрос. Существует система на php+mysql ,в ней могут регистрироваться множество пользователей. Эти пользователи могут добавлять в систему свои записи. От пары символов до текстов по объему равных Войне и миру. Функционал системы -добавление записей, вывод записей конкретного пользователя, поиск по записям конкретного пользователя. Вывод всех пользователей, поиск по записям всех пользователей. Ориентировочно 1 пользователь будет добавлять в год от 500 текстов +-. Вопрос -как организовать таблицу хранения данных записей, какие ключи, индексы и прочие темы использовать? Вариант id | name | text | user_id я бы не стал заморачиваться и мучить форум глупостями, но объем текстов предполагается разнообразный и заливать будут в том чисел очень большие тексты и количество текстов будет огромное. Не хотелось бы ошибиться изначально |
![]() |
|
![]() ![]() int main(){printf("Hello World"); return 0;"} ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2490 Пользователь №: 20247 На форуме: Карма: 63 ![]() |
ну для огромных текстов есть тип TEXT и связанные с ним в бд, не говоря уже про просто BLOB.
И, кстати, что такое огромные текст? Так-то война и мир в чистом виде занимает ~3мб(первая что нагуглил). Это совсем не много и легко вместится в стандартный LONGTEXT. Ну а для текстов, которые больше LONGTEXT-а можно проверять размер и бить на части, и писать в соотв-ю табличку частями. -------------------- "Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar |
![]() |
۩
Дата
|
![]() Абориген ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 229 Пользователь №: 38653 На форуме: Карма: ![]() |
vital
т.е. фактически для больших текстов должна быть доп таблица? |
![]() |
|||
![]() ![]() int main(){printf("Hello World"); return 0;"} ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2490 Пользователь №: 20247 На форуме: Карма: 63 ![]() |
Если вдруг у вас будет текст, который больше чем тип LONGTEXT (что вряд ли, война и мир короче в полтора-два раза), то да, стоит вынести текст - как отдельную сущность, соотв-но дробить тексты на части, и писать в эту таблицу храня соотв-е каждой части к какой сущности эта часть относится и какая она по порядку. НО. Если не критично время ответа страницы (если 10-20-30ms не критичны для вас, а я думаю не критичны), как вариант попробуйте ваши тексты просто жать каким-нить зипом при записи, и при выводе распаковывать, а писать соотв-но просто в BLOB. Тексты очень хорошо и, я думаю, быстро жмутся. Вряд ли вы встретите текст, который сжатый в зип выйдет из размеров LONGBLOB. Но да, с точки зрения универсальности и надежности первый вариант правильнее. А еще. А вы уверены что вам надо mysql ? Возьмите какой-нить Redis, у него максимальный размер строки вообще 512мб. Это пол-интернета в тексте. Да и удобнее работать вам будет, чем с SQL в данном случае, имхо. -------------------- "Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar |
||
![]() |
۩
Дата
|
![]() Абориген ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 229 Пользователь №: 38653 На форуме: Карма: ![]() |
vital
благодарю |
![]() |
|||
![]() ![]() חשב את עצמו ![]() ![]() ![]() ![]() ![]() ![]() Профиль Журнал Группа: Администратор ![]() Сообщений: 6969 Пользователь №: 1 На форуме: Карма: 145 ![]() |
В несжатом виде база сообщений нашего форума больше гигабайта. ![]() -------------------- Бесплатному сыру в дырки не заглядывают...
|
||
![]() |
|||
![]() ![]() Пофигист ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 883 Пользователь №: 36058 На форуме: Карма: 43 ![]() |
А если почитать доку? ![]() -------------------- |
||
![]() |
|||||
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 474 Пользователь №: 37895 На форуме: Карма: 22 ![]() |
можно id объединить с user_id сделав ключ составным по id и name. Вопрос
упирается в вопрос: каков бюджет мероприятия?
|
||||
![]() |
|||||
![]() ![]() int main(){printf("Hello World"); return 0;"} ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2490 Пользователь №: 20247 На форуме: Карма: 63 ![]() |
Я люблю утрировать, да. Ну так-то база форума не связанный текст, и собрана годами, и блаблабла. Короче давайте лучше занудамоде=офф -------------------- "Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar |
||||
![]() |
|||||||
![]() ![]() int main(){printf("Hello World"); return 0;"} ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 2490 Пользователь №: 20247 На форуме: Карма: 63 ![]() |
Для однобайтной кодировки 1 символ = 1 байт(можете проверить с помощью блокнота), для боговерного двухбайтового юникода 2 соответственно. Ну разделите на 1024 несколько раз, приняв что размер войны и мир меньше 3х мб. Где я не прав? Что не соотв-т доке? -------------------- "Нужно быть готовым прислушиваться к тем, кто может тебя чему-нибудь научить. Иначе ты никогда не вырастешь."
Откровенно я никому ниразу не нагрубил. А дать подзатыльник зарвавшемуся юнцу, так это и ему на пользу, и мне в удовольствие. © AllesKlar |
||||||
![]() |
|||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 6464 Пользователь №: 35718 На форуме: Карма: 208 ![]() |
я бы этого не делал, и другим бы не советовал id с user_id составной уникальный можно сделать -------------------- |
||
![]() |
|||
![]() ![]() Пофигист ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 883 Пользователь №: 36058 На форуме: Карма: 43 ![]() |
Быть Вам финансистом Партии и Правительства! ... во веселуха будет ![]() ![]() -------------------- |
||
![]() |
|||
![]() ![]() חשב את עצמו ![]() ![]() ![]() ![]() ![]() ![]() Профиль Журнал Группа: Администратор ![]() Сообщений: 6969 Пользователь №: 1 На форуме: Карма: 145 ![]() |
Не получится. Потому как топикстартер некорректно поставил вопрос. Ничего не сказано о целях хранения информации. На примере движка этого форума, у нас существуют 3 параллельных способа хранения информации: 1. В БД текстовые поля - доступные поиску. 2. В gz-файлах. Для экономии дискового пространства. Для больших текстов. Есть возможность поиска средствами пхп. 3. Зазипованные в БД в поле blob. Для маленьких текстов. Потому что если их хранить в файлах, будут большие потери на кластеризации. -------------------- Бесплатному сыру в дырки не заглядывают...
|
||
![]() |
|||||
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 474 Пользователь №: 37895 На форуме: Карма: 22 ![]() |
id === user_id и тогда id | name | content, private key (id, name) будет состоять во 2 н.ф. что не так плохо. Если конечно это высоко нагруженный проект тогда надо по другому, но так как человек хочет что-то простое, для душу смастерить то в самый раз. |
||||
![]() |
|
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 6464 Пользователь №: 35718 На форуме: Карма: 208 ![]() |
mvg, это сделает невозможным добавление двух текстов с одинаковым названием, плюс ко всему индексация по числам гораздо шустрее, чем по строкам. В итоге два минуса, против сомнительной экономии дискового пространства... не густо.
Вы правда хотите со мной поговорить о нормальных формах ? ![]() -------------------- |
![]() |
![]() ![]() ![]() |