singlepost

Что лучше одна большая таблица или много маленьких? << На главную или назад  

Суть:
На сайте регистрируются пользователи и на каждого создаётся отдельная таблица для личных сообщений.
Логикой выбора такого решения было то, что сами таблицы между собой не взаимодействую и не нужно делать выборку (например, founder = $user_id) при отображении всех сообщений одного пользователя.

Вопрос:
Серверу нехватает памяти и виртуальная машина частенько зависает, может ли быть этому причина большое количество этих таблиц (около 2,5 тыс.)?

76 ответов в теме “Что лучше одна большая таблица или много маленьких?”

  1. 25
    Кирилл Быков ответил:

    Леонид maxleo Максимов 4 апр 2009 в 19:53 +1

  2. 24
    Леонид Максимов ответил:

    я заметил :)

  3. 23
    Евгений Баталов ответил:

    Если вы обо мне, то я типо мальчек :) ) Это у меня ник такой, даж не знаю зачем…

  4. 22
    Леонид Максимов ответил:

    кстати, а что такого написала Marina Jee (единственная девушка, отписавшаяся в этом обсуждении), что у нее вдруг лучше по теории?

  5. 21
    Леонид Максимов ответил:

    да что вы, в этом деле важна только практика. никакие занятия не дадут вам такого опыта.

  6. 20
    Almaz Ilyasov ответил:

    да здравствуют девушки программисты, я все занятия по бд прогуливал, а девушки учились, у них по теории лучше)

  7. 19
    Евгений Баталов ответил:

    Делаешь в большой таблице на юзерИД первичный ключ или кластеризованный индекс и нашел одну запись с юзерИД=>нашел сразу все.
    Можно еще комбинировать, т.к. у некластеризованного индекса в конце дерева находится кластеризованный, но эт чуть посложнее. Я про мс скуэль.
    А вобще прежде чем чего-то делать, надо книжки почитать, а то будешь народ смешить.
    Как пример отдельного хранения: у меня в БД есть 2 таблицы, одна о текущих ремонтах, другая о выполненных(для их выборки используется достаточно сложный запрос), большинство запросов по текущим ремонтам, поэтому вынесение их в отдельную таблицу дает прирост производительности.

    А кол-во таблиц может грузить сервер если СУБД тормозит при увеличении кол-ва метаданных,это зависит от конкретной СУБД.

  8. 18
    Александр Пинский ответил:

    1. разделять на отдельные таблицы смысла нет, ибо запрос founder = $user_id при наличии индекса на колонке founder будет работать быстро (работал как-то с таблицей на 270 тысяч записей – простые запросы быстрые)
    2. выносить в отдельную БД смысла не вижу, если сайт, это что-то типа форума, то нагрузка на эту таблицу маленькая и тащить её в отдельную БД на отдельном сервере ради быстродействия не нужно

    2 Алексей Cheat Злобин
    <Вообще так делать _никогда_ нельзя.>
    Вообще создание нескольких однотипных таблиц иногда имеет смысл, но конечно не в этом случае.

  9. 17
    Алексей Злобин ответил:

    > Но всё же могут ли эти 2000 таблиц быть причиной зависания виртуальной машины?
    Хз, смотря как построена работа БД с файловой системой и кэш. По идее не должна…
    Вообще так делать _никогда_ нельзя.

  10. 16
    Andreus Hidrag ответил:

    Читай учебники про нормализацию

  11. 15
    Юрий Лисичкин ответил:

    афтар, тебе сюда =)
    //thedailywtf.com/
    //ru.thedailywtf.com

  12. 14
    Алексей Гридин ответил:

    В отдельную базу данных не выносится не потому что она на том или другом сервере находится, а потому что предметная область то одна и база данных единая (хотя ничто не мешает быть ей распределённой).

  13. 13
    Вова Мухин ответил:

    Но всё же могут ли эти 2000 таблиц быть причиной зависания виртуальной машины?

  14. 12
    Вова Мухин ответил:

    > а в отдельную бд выносить смысла нет, если эта база находится на том же самом сервере, а не на отдельном

    Спасибо.

  15. 11
    Кирилл Быков ответил:

    Эх, достала школота… *насвистывает похоронный марш*

  16. 10
    Almaz Ilyasov ответил:

    забавно))

    а в отдельную бд выносить смысла нет, если эта база находится на том же самом сервере, а не на отдельном

    кстати, 2000 пользователей это совсем немного

  17. 9
    Вова Мухин ответил:

    То что создание множества однотипных таблиц глупо, я уже понял…

    Ну всё таки имеет ли смысл большую тяжёлую таблицу выносить в отдельную БД?

  18. 8
    Марина Гаврилина ответил:

    Нет слов… Это как же надо начать думать, чтоб до такого додуматься o_O

  19. 7
    Андрей Юткин ответил:

    O_o естественно одна — это же одна сущность!

  20. 6
    Александр Джагриев ответил:

    Мой препод по БД за 2000 однотипных таблиц просто бы расстрелял=)
    Для больших данных используй cпециальный тип, например как тут: //my-oracle.it-blogs.com/post-30.aspx

    Я точно не уверен, но думаю должно помочь по перформансу.

  21. 5
    Кирилл Быков ответил:

    Мне кажется, что не стоит изобретать велосипед в тех случаях, когда решение уже придумано задолго до вашего рождения. Кури мануалы, аффтар!

  22. 4
    Виктор Романов ответил:

    имхо жестоко…
    а сколько юзеров на сайте?

  23. 3
    Вова Мухин ответил:

    И имеет ли смысл большую тяжёлую таблицу выносить в отдельную БД?

  24. 2
    Вова Мухин ответил:

    Сам. Логикой выбора такого решения было то, что сами таблицы между собой не взаимодействую и не нужно делать выборку (например, founder = $user_id) при отображении всех сообщений одного пользователя.

  25. 1
    Андрей Горбоконь ответил:

    Интересно,
    а вы сами до этого дошли (создать >2000 таблиц),
    или где-то это практика уже применена?

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.