Хорошо, я прочитал довольно много вещей о PostgresSQL, и, похоже, у него есть несколько функций, которые кажутся довольно крутыми, мне действительно нравится идея возможности обновлять таблицу и добавлять столбец / индекс, не дожидаясь базы данных и запереть его. Кроме того, он кажется таким же быстрым, как MySQL, когда дело доходит до производительности. Но меня больше всего беспокоит легкость увеличения масштабов до такой же реляционной, как моя система.

Прямо сейчас у меня есть таблицы, каждая из которых имеет внешние ключи и связана друг с другом для простоты использования, и я использую внешние ключи много . В качестве примера у меня есть таблица "игроков", в которой есть много таблиц, связанных с ней. У меня есть следующие таблицы, которые выходят из него.

  1. Player_mail
  2. player_mail_attachments
  3. player_bank
  4. player_inventory
  5. player_effects
  6. player_effects_temp
  7. player_quests
  8. player_quests_tasks
  9. ...

И список продолжается. У меня есть несколько других таблиц, и все они используют идентификатор таблицы игроков в качестве одного из своих индексов и связаны со столбцом player.id. Также одна почта имеет внешний ключ к почте, а другие также являются реляционными. Хорошо ли PostgreSQL масштабируется с реляционной базой данных? У меня также есть несколько указателей по большинству таблиц. Все таблицы, которые не являются «корневыми» (например, таблица игроков), имеют два индекса: первичный ключ, а затем также индексы для внешних ключей.

Я уже читал, что postgres не создает индексы для внешних ключей автоматически, поэтому я знаю, что мне, вероятно, придется создавать эти индексы вручную. С учетом того, что я сказал, насколько хорошо Postgres обрабатывает такой набор данных? Я уверен, что кто-то еще до меня уже создал высокореляционную базу данных в СУБД, и я хотел бы услышать их опыт.

Отредактируйте, чтобы добавить:

Я в первую очередь смотрю на него, потому что он обрабатывает блокировку во время записи, а также потому, что я не знаю, как я отношусь к oracle, и полагаюсь на xtradb как на формат базы данных. Хотя я знаю, что MariaDB работает над собственным форматом базы данных, мне все еще не нравится, что мой любимый формат базы данных находится под контролем компании, которая может просто убить его или, что еще хуже, сделать его полностью закрытым. После того, как я пройду через postgresql и посмотрю, как я могу легко перенести в него свои базы данных и просмотреть инструменты для этого, я выберу, какой ответ был лучшим, я также оставлю его открытым на 24 часа, чтобы люди могли исправить все, что они желают.

Редактировать 2:

Я только что наконец начал изучать сам формат базы данных, и хотя мне действительно нравятся некоторые вещи, которые я не переношу в объектной ориентации, это сводит меня с ума. Я был полностью готов перейти на postgres, пока не понял, что он смоделирован на основе половины объектной ориентации. Думаю, один из моих последних вопросов по этому поводу: он не заставляет меня правильно использовать классы и объекты? Википедия говорит, что это «мост» между ООП и RDMB, поэтому я считаю, что все еще могу делать все так, как мне нравится думать об этом. Если это так, то я, вероятно, полюблю базу данных, если не смогу, то возненавижу. И я бы предпочел не ненавидеть инструмент, который так важен для успеха этой штуки.

1
133794m3r 30 Авг 2011 в 06:06

3 ответа

Лучший ответ

300 таблиц с множеством внешних ключей и индексов, около 150 таблиц с более чем 1000 записей, около 20 таблиц с более чем 100000 записей - это достаточно для вас?

Никогда не сталкивался с проблемами производительности, вызванными самим PostgreSQl. Чудовищные запросы из 400+ строк и примерно 15 подзапросов выполняются за секунду.

Подводя итог: PostgreSQL очень хорошо масштабируется. Конечно, Oracle не может сравниться с Oracle, но он выполняет свою работу. Единственный совет: если вы ОЧЕНЬ озабочены производительностью, замените триггеры правилами и по возможности используйте представления вместо хранимых процедур.

4
J0HN 30 Авг 2011 в 07:22

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

Что касается масштабирования MySQL и Postgres, вы в основном столкнетесь с одними и теми же препятствиями, поскольку они обе действительно быстрые и стабильные СУБД.

Все это говорит о том, что Postgres гораздо более совместим с ACID, чем MySQL, он обрабатывает FK так, как вам нужно, и я бы в целом рекомендовал его, основываясь на том, что вы выразили в своем сообщении.

1
jturmel 30 Авг 2011 в 04:31

Неважно, что вы используете. Все зависит от приложения и архитектуры. Например, внешние ключи не сильно повредят, если вы сделаете небольшую избыточность. пример:

players(id, ....)
players_quests(id, player_id, ....)
players_quests_tasks(id,player_quest_id, ...)

Чтобы найти player_quests_tasks, принадлежащий какому-то игроку, вам нужно присоединиться. Решение: добавить player_id в таблицу Players_quests_tasks. Нормализация нарушена, но соединения нет:

players_quests_tasks(id,player_quest_id, player_id,...)
SELECT * FROM players_quests_tasks WHERE player_id=:player_id_to_find;

Это имеет смысл, если у вас гораздо больше операций чтения, чем записи.

0
baklarz2048 30 Авг 2011 в 08:34