У меня есть база данных в postgresql для программного обеспечения как сервис с сотнями клиентов, в настоящее время у вас есть схема postgresql для каждого клиента, но мне нравится лучшее решение, потому что клиенты быстро растут. Я читал о кассандре, но я не хочу потерять целостность первичных, начальных ключей и проверок. Также читайте о PostgreSQL в распределенных системах, но я не знаю, что это лучший способ для реализации этого в настоящее времяКаков наилучший способ распространения postgresql
ответ
Есть четыре уровня, на которых вы можете отделить клиент:
Запуск отдельного PostgreSQL кластера для каждый клиент. Это обеспечивает максимальное разделение; каждый клиент находится на отдельном порту с собственным набором системных таблиц, журналом транзакций и т. д.
Поместите каждого клиента в отдельную базу данных в том же кластере. Таким образом, у каждого из них есть отдельный логин, но на одном и том же номере порта, и они совместно используют глобальные таблицы, такие как pg_database.
Предоставьте каждому клиенту отдельную схему в той же базе данных. Это не требует отдельных идентификаторов пользователей, если они только подключаются через ваше программное обеспечение, потому что вы можете просто установить путь search_path. Конечно, вы можете использовать отдельные идентификаторы пользователей, если хотите.
Сделайте customer_id частью первичного ключа каждой таблицы и не забудьте ограничить это в своем программном обеспечении. Вероятно, это будет лучше, чем дублирование таблиц для каждого из сотен пользователей, но вы должны быть очень осторожны, чтобы всегда отвечать на ваши запросы по customer_id.
Некоторые люди, как известно, объединяют эти методы, например, ограничивая каждый кластер 100 базами данных с отдельной базой данных для каждого клиента.
Без дополнительной информации трудно узнать, какая конфигурация будет лучше для вашей ситуации, за исключением того, что если вы хотите разрешить пользователям прямой доступ к базе данных, не просматривая программное обеспечение, вам нужно подумать о том, что видно в системных таблицах с каждой опцией. Посмотрите на pg_database, pg_user и pg_class с точки зрения пользователя, чтобы увидеть, что отображается.
я не хочу потерять целостность первичных, Foregin ключей и проверки
Точка систем, как Кассандра, когда набор данных или нагрузки не помещается на одной машине, вы должны отказаться от этих вещей, даже если вы останетесь на postgresql. (Я рассказывал подробности в разговоре, который я очень рекомендую: http://blip.tv/pycon-us-videos-2009-2010-2011/pycon-2010-what-every-developer-should-know-about-database-scalability-21-3280648).
Итак, Кассандра является ответом на вопрос: «Если мы знаем, что нам придется отказаться от внешних ключей и присоединяться, что мы можем построить, переосмыслив, как мы проектируем нашу базу данных?»
Если вы никогда не доберетесь до этого момента, Кассандра переполнена. (Но вы все равно должны следить за этим разговором.)
- 1. Каков наилучший способ распространения класса C++
- 2. Каков наилучший способ распространения Lua и библиотек?
- 3. Каков наилучший способ распространения кода на серверах?
- 4. Каков наилучший способ распространения приложений Java?
- 5. Каков наилучший способ распространения инструментов командной строки python?
- 6. Каков наилучший способ отслеживания распространения событий в Chrome?
- 7. Каков наилучший способ распространения файлов заголовков моей общей библиотеки C++?
- 8. Каков наилучший способ упаковки и распространения приложения Excel
- 9. Каков наилучший способ распространения бинарных файлов .Net и PDB?
- 10. Каков наилучший способ распространения бинарного приложения для Linux?
- 11. Каков наилучший способ распространения моего местоположения? Уведомить все приложения?
- 12. Каков наилучший способ распространения ошибки проверки аргумента в Swift?
- 13. Каков наилучший способ распространения приложения iOS для клиентов?
- 14. Каков наилучший способ увеличения?
- 15. Каков наилучший способ запроса?
- 16. Каков наилучший способ многопоточности?
- 17. Каков наилучший способ организовать фид разных типов в PostgreSQL?
- 18. PostgreSQL: Каков наилучший способ сортировки нескольких array_agg() с разными условиями?
- 19. Каков наилучший способ загрузки огромного количества данных в PostgreSQL?
- 20. Каков наилучший способ хранения значений NodaTime в PostgreSQL?
- 21. Каков правильный способ распространения .catch в обещании?
- 22. Каков наилучший способ запуска N независимых обновлений столбцов в PostgreSQL? Каков наилучший способ сделать это в спецификации SQL?
- 23. Каков наилучший способ узнать texmacs?
- 24. Каков наилучший способ анимировать кнопки?
- 25. Каков наилучший способ выполнения многопоточности?
- 26. Каков наилучший способ обновления web.config?
- 27. Каков наилучший способ закрыть ByteArrayOutputStream?
- 28. Каков наилучший способ потокового видео?
- 29. Каков наилучший способ реализации поиска?
- 30. Каков наилучший способ узнать CUDA?
Люблю разговор! +1 – Abdo
вышеупомянутая ссылка не приводит к разговору. Не могли бы вы разместить соответствующую ссылку. – SahuKahn
@SahuKahn попробуйте те два: * видео: http://pyvideo.org/video/313/pycon-2010--what-every-developer-should-know-abou * слайды: http: //www.slideshare ,net/jbellis/what-every-development-should-know-about-database-scalability-pycon-2010 –