powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как организовать связь между звездой: Центральная база - Много второстепенных баз
36 сообщений из 36, показаны все 2 страниц
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676457
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно было бы пойти по простому пути и сделать репликацию, но задача несколько иная.

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

К примеру, во второстепенной базе №1 и №2 были добавлены свои клиенты, по ним созданы заказы и т.д.
В 00:00 происходит отправка в центральную базу (думаю сделать скрипт синхронизации PHP и повесить на крон) со второстепенных баз всех изменений за день.
Затем в 01:00 со всех второстепенных баз делается запрос в центральную на обновление таблицы клиентов, и они получают в ответ все изменения (добавления/редактирования/удаления).

Но тут у меня возникает вопрос, как быть с primary key, что бы избежать дублей при получении данных со второстепенных баз?
Сделать составной primary из BaseID (код второстепенной базы) + TableID (обычный AI key)?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676460
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UPD.
Отдельная проблема возникает с пониманием синхронизации со второстепенной базы таблиц пересечений (т.е. где хранятся связи таблиц, к примеру структура таблицы Order: ClientID, ProductID), как быть с ней? Вешать OrderID + BaseID на такую таблицу, которые до этого по сути вообще были не нужны?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676463
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UPD.
Синхронизацию думал делать "INSERT ... ON DUBLICATE UPDATE" по запросу "SELECT * WHERE ChangeStamp > ДатаПоследнейСинхронизации", поле ChangeStamp во всех таблицах timestamp update on change
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676474
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Primary key - GUID
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676620
biwed.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m1andry,
Добрый день.
Можно посоветовать вам начать изучать Business Intelligence и особенно прочитать про проектирование DWH.
m1andryВ 00:00 происходит отправка в центральную базу (думаю сделать скрипт синхронизации PHP и повесить на крон) со второстепенных баз всех изменений за день.

Для таких случаев гораздо эффективнее использовать ETL сервера. В частности запуск PDI (Pentaho Data Integration) можно также переложить на крон.
m1andryНо тут у меня возникает вопрос, как быть с primary key, что бы избежать дублей при получении данных со второстепенных баз?
Для primary использовать суррогатный ключ. а BaseID (код второстепенной базы) + TableID (обычный AI key) Альтернативный.

m1andryСинхронизацию думал делать "INSERT ... ON DUBLICATE UPDATE" по запросу "SELECT * WHERE ChangeStamp > ДатаПоследнейСинхронизации", поле ChangeStamp во всех таблицах timestamp update on change
И это можно переложить на ETL сервер.

Думаю, что следующим шагом станет изучение OLAP.

PS. Если интересно, можете изучить проект на Pentaho. www.biwed.ru/index.php/pentaho . Многие вопросы разбираю, но не все, которые вы задали. В частности показываю как спроектировать ETL процесс, создать простенький DWH и создать простой OLAP куб, для анализа данных. Данные заливаю из одной БД Mysql в другую. Причем можно использовать разные СУБД.

С уважением,
biwed.ru
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676671
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,
Спасибо, почитал про GUID, возникло несколько вопросов:
1) В MySQL реализация поля только через CHAR(30)?
2) Можно ли сделать autoincrement без передачи GUID со стороны клиента?
3) Насколько понял, существует проблема с кластеризацией индексов, и соответственно со временем операций?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676674
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
biwed.ru,

Вы меня извините, но больше смахивает на рекламу вашего проекта, чем совет по существу.
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676686
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676722
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

Благодарю за информацию.
Не смог там найти ответ на вопрос по поводу возможности autoincrement GUID, нельзя ли, к примеру, установить для поля значение по умолчанию UUID()?
Или перед INSERT обязательно нужно будет выполнить SELECT UUID()?

И еще вопрос по типу данных, использовать все же нужно VARCHAR(38) 16 байт?
varchar для PK и для индексов ведь не самое лучшее решение?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676727
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryустановить для поля значение по умолчанию UUID()?
Напрямую нет, но можно триггер на before_insert

Вот, я в яндексах нашел:
Код: sql
1.
2.
3.
4.
CREATE TRIGGER before_insert_app_users
  BEFORE INSERT ON app_users 
  FOR EACH ROW
  SET new.api_key = uuid();



m1andryиспользовать все же нужно VARCHAR(38)
Почему бы и нет?

m1andryvarchar для PK и для индексов ведь не самое лучшее решение?
Правильно, не лучшее. Но и не самое плохое. Разница будет видна на очень больших объемах. А если периодически для поля с GUID делать перестроение индексов, то и "кластеризация индексов" не будет являться проблемой.
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676733
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

Как-то у меня с триггерами не заладилось, первое знакомство с ними приводили к тому, что внесение данных в базу занимало очень много ресурсов и практически вешало железо, да и навешивать триггеры на n-нное количество таблиц - долгая процедура, когда можно в одном месте кода просто добавить (ID, ...) VALUES (UUID(), ...)

Тут другой момент возникает, как относитесь к такой информации по индексам:
binary(16) как guid

И еще вот нашел про UUID_SHORT(), но еще не понял, за счет чего он формируется.
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676734
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да что ж тут нельзя свои сообщения то редактировать?
Вот про http://dev.mysql.com/doc/refman/5.1/en/miscellaneous-functions.html#function_uuid-short
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676741
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m1andry,

А вот про производительность :

I’ve created MyISAM tables containing just integer auto_increment primary key and containing char(36) value and used for UUID primary key and when I populated it with 268.435.456 rows (large enough for that 512M box to be disk bound). For auto_increment key load process took 1 hour 50 minutes giving load speed of 40305 rows/sec. For UUID process took over 12 hours and is still going. From MySQL status I can see it is loading about 200 rows/sec and the it is still slowing down a bit as key file growths. So in this little case we have about 200 times performance difference which is worth to consider
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676809
biwed.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m1andry,
Добрый день.
m1andrybiwed.ru,

Вы меня извините, но больше смахивает на рекламу вашего проекта, чем совет по существу.
Возможно вы и правы, просто хотел написать в трех словах, есть ли смысл заходить по ссылке (вижу для вас нет).
В посте выше шла речь о ETL серверах, возможно там все сделать будет проще чем на PHP. Хотя дело ваше. ТЗ есть ТЗ.

biwed.ruДля primary использовать суррогатный ключ. а BaseID (код второстепенной базы) + TableID (обычный AI key) Альтернативный.
Сори. Это не ваш вариант. Перечитал ваше задание еще раз. Это для стандартный прием для DWH, но не для "реплики".

С уважением,
biwed.ru
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676834
17-77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryСделать составной primary из BaseID (код второстепенной базы) + TableID (обычный AI key)?
либо guid, либо составной ключ во всех синхронизируемых таблицах
если надо еще разграничить права доступа (тетя Маша из филиала №1 не может переименовать запись тети Клавы в филиале №2) - тогда только составной ключ

Arm79почитайте http://habrahabr.ru/post/31632/
бредо-статья:
1. я тоже не делаю 11 обращений к базе, когда создаю записи с PK int
2. написал выше, если нужны разграничения прав доступа - без "ид филиала" не обойтись
3. да, тут полезная штука
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38676838
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryКак-то у меня с триггерами не заладилось, первое знакомство с ними приводили к тому, что внесение данных в базу занимало очень много ресурсов и практически вешало железо
Ничего не могу сказать, возможно вы просто не умеете их писать?
m1andryТут другой момент возникает, как относитесь к такой информации по индексам:
binary(16) как guid
Никак. Например, в MS SQL никаких побочных эффектов не видел

Сделайте проще - тестовая таблица с триггером и прогоните тесты. потом уж принимайте решение о том, подходит что-то вам или нет
m1andrySo in this little case we have about 200 times performance difference which is worth to consider
Если у вас генерация сотен миллионов записей - частая операция, то тогда guid не подходит
17-771. я тоже не делаю 11 обращений к базе, когда создаю записи с PK int
я тоже, но для этого приходится немного приложить усилий
17-772. написал выше, если нужны разграничения прав доступа - без "ид филиала" не обойтись
не 100%. реплика может хранить те же права доступа
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38677136
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79не 100%. реплика может хранить те же права доступа

Как это организовать?
Просто пока склоняюсь все же к GUID, так как это практически не приведет к перестройке структуры базы данных и кода, просто заменить текущие поля ID INT на CHAR(30) и сделать "SET ID=UUID()", но не понимаю, как сделать разграничение доступа по базам без введения дополнительной колонки BaseID, а если ее уже и вводить, то спокойно можно уже и составной ключ делать.
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38677205
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryArm79не 100%. реплика может хранить те же права доступа
Как это организовать?
А что такого-то? Доступ даете не пользователям, а группам.

Вы на примере поясните, в чем видите сложность...
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38677263
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79Вы на примере поясните, в чем видите сложность...

Ну к примеру, с локальной базы №1 заливаются данные в центральную, как пользователям группы №1 с правами доступа к локальной базе №1 ограничить данные к данным из локальной базы №2?
Нужно ведь поле, по которому можно будет идентифицировать, из какой базы зашли данные в центральную?
Или можно как-то воспользоваться только GUID?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38677360
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryиз какой базы зашли данные в центральную
1) а почему ваши пользователи работают с центральной вместо своей локальной реплики?
2) и почему вообще надо что-то ограничивать?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38677429
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79m1andryиз какой базы зашли данные в центральную
1) а почему ваши пользователи работают с центральной вместо своей локальной реплики?
2) и почему вообще надо что-то ограничивать?

1) Пользователи каждый работает в своей локальной базе.
Раз в сутки данные с локальной отправляются в центральную.
2) Нужно понимать, с какой базы зашла информация, как по GUID можно определить отправителя информации (№ локальной базы) в центральную базу?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38677482
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andry1) Пользователи каждый работает в своей локальной базе.
Раз в сутки данные с локальной отправляются в центральную.
Значит, необходимости ограничивать что-либо отсутствует, так? Ведь в локальной реплике доступ есть, а к остальным априори отсутствует

m1andry2) Нужно понимать, с какой базы зашла информация, как по GUID можно определить отправителя информации (№ локальной базы) в центральную базу?
Зачем? Если требуется знать, в центральной БД нужно поле ReplicaID. Вы пока не обосновали, зачем вам...
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38677690
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79Зачем? Если требуется знать, в центральной БД нужно поле ReplicaID. Вы пока не обосновали, зачем вам...

Для разграничения прав пользователей.
Пользователи локальной базы №1 не должны видеть данные локальной базы №2, при этом у всех одна общая база, которая синхронизируется через центральную.
Вот и я о том же, обязательно нужно поле ReplicaID, обойтись только GUID для идентификации, откуда зашло, нельзя?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38677702
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryПользователи локальной базы №1 не должны видеть данные локальной базы №2
У вас двусторонняя репликация? Вы что, клиентские данные распространяете по всем репликам? Я просто не понимаю, какие именно данные вы собираетесь прятать? Если пользователи где-то далеко имеют доступ только к своей реплике, что вам мешает на ту реплику слать только нужные данные?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38677978
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

Да, двухсторонняя. Из центральной в локальные возвращаются обновленные общие справочники.

Кроме того, некоторым пользователям нужно давать доступ не только к своей локальной, но и к примеру соседним базам.
На простом примере из другой теоретической области это выглядит так: каждое территориальное подразделение видит только свою локальную базу, в рамках одной территориальной единицы (города/области) региональные директора видят информацию по всем своим территориальным подразделениям, в рамках всех территориальных подразделений генеральный директор видит всю информацию. Так же в подчинении генерального директора могут быть зам. директора по нескольким регионам.
В виде схему можно выразить следующим образом:

.........................Генеральный директор.......................
......................./.................|.................\..................
..................Зам1...............Зам2...............Зам3...........
.............../....|....\........../....|....\.........../....|....\.......
...........РД1..РД2..РД3...РД4..РД5..РД6...РД7..РД8..РД8..
......../...|...\...........
.......П1..П2..П3.......

Где РД - региональный директор
П - подразделения

И подразделение П1 не должно видеть данные, введенные П2, а региональный директор 1 не должен видеть данные региона №2.
Т.е. нужно разграничить права доступа по ID локальной базы, но как его вшить в UUID?
Нашел, что вроде как UUID_SHORT() формируется на основе id_server + time_serber + autoincrement, но не могу понять, где настраивать id_server и как будет меняться от этого UUID_SHORT().
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38678095
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryUUID_SHORT()
не стоит использовать...

код подразделения нужно вводить... как минимум в центральную БД
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38678342
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79m1andryUUID_SHORT()
не стоит использовать...

код подразделения нужно вводить... как минимум в центральную БД

Тоже сомневаюсь насчет него, так как неясна природа создания этого "случайно уникального" числа, но подкупает то, что тип поля INT, т.е. не прийдется перелопачивать весь код для внесения изменений с работой по ID типа String.
А как по-вашему мнению, почему UUID_SHORT() не стоит использовать?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38678345
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m1andry... не прийдется перелопачивать весь код для внесения изменений с работой по ID типа String.

У меня плейсхолдеры на ID везде ?i, но это то, что на поверхности. Пока не до конца осознаю, во что еще может вылиться смена первичного ключа на String.
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38678349
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79не стоит использовать...

Вот кстати еще один повод для сомнений.

Никак не пойму, отчего в MySQL столько мелочей-недоработок?
Почему нет возможности стандартными средствами хранить дерево в таблицах, а нужно мудрить костыли с Nested Tree?
Почему до 5.5 только на одно поле Timestamp можно было вешать CURRENT_TIMESTAMP?
Почему не оптимизирована работа с UUID (хранение, индексация, кластеризация и т.д.)?
Но это так, крик души)

Кстати, не посоветуете какой-нибудь простенький класс для работы с Nested Tree? Может сталкивались.
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38678361
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А вот кстати по поводу кластеризации, оказывается в UUID_SHORT можно настраивать порядок формирования значения , т.е. что бы сначала шел timestamp вместо server_id, ну и наоборот.
Скажите пожалуйста, где выставляется этот самый server_id?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38678553
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryА как по-вашему мнению, почему UUID_SHORT() не стоит использовать?
Из-за этого:
The value of UUID_SHORT() is guaranteed to be unique if the following conditions hold:
* The server_id of the current host is unique among your set of master and slave servers
* Server_id is between 0 and 255
* You do not set back your system time for your server between mysqld restarts
* You do not invoke UUID_SHORT() on average more than 16 million times per second between mysqld restarts

Не переводить время, ограничения на ServerId, требование уникальности имени северов только в рамках вашей системы. В общем, если это не смущает, то можно выбирать.
m1andryНикак не пойму, отчего в MySQL столько мелочей-недоработок?
Покупайте Oracle или MS SQL :-)


m1andryПочему нет возможности стандартными средствами хранить дерево в таблицах, а нужно мудрить костыли с Nested Tree?
Это какие такие "стандартные" средства? Nested Tree - это лишь тип дерева, который реализуется везде. Чем вас не устраивает стандартные Id - ParentId?

m1andryПочему не оптимизирована работа с UUID (хранение, индексация, кластеризация и т.д.)?
Почему не оптимизирована? Вы с чем сравниваете то?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38678688
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нужны какие-то тонко-настроеные права
доступа, то имеет смысл создать отдельную колонку
created_by или,например source_db_id.
Вычислять на лету источник из ГУИД , я думаю, будет
небыстро (по сравнению с отдельной
проиндексированой колонкой)
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38679778
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
javajdbcЕсли нужны какие-то тонко-настроеные права
доступа, то имеет смысл создать отдельную колонку
created_by или,например source_db_id.
Вычислять на лету источник из ГУИД , я думаю, будет
небыстро (по сравнению с отдельной
проиндексированой колонкой)

Подскажете, какое Ваше мнение насчет UUID() в качестве PK?
Все-таки CHAR(30), насколько удачно применять строчный первичный ключ?
Не будет заметной потери в производительности, если есть куча JOIN ON ID=parentID?
И также куча таблиц-связок одна-ко-многим (ID1, ID2), опять же, занимаемое место, или можно пренебречь?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38679789
m1andry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79m1andryПочему не оптимизирована работа с UUID (хранение, индексация, кластеризация и т.д.)?
Почему не оптимизирована? Вы с чем сравниваете то?

Сравниваю с обычным INT, или ошибаюсь? INT PK при AI пишется в индексе в конец, так как ID идет по возрастающей, а вот что будет с UUID, который постоянно генерируется с бухты-барахты?

Как вообще реализуется в крупных проектах PK? INT или делают и UUID?
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38679807
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryСравниваю с обычным INT, или ошибаюсь? INT PK при AI пишется в индексе в конец, так как ID идет по возрастающей, а вот что будет с UUID, который постоянно генерируется с бухты-барахты?

Как вообще реализуется в крупных проектах PK? INT или делают и UUID?

Смысл сравнивать с Int? Разумеется, ключ с последовательным рядом гораздо предпочтительнее. Для Guid в MS SQL сделали функцию NewSequentialId , которая возвращает уникальные возрастающие значения. Для MySql мне такой функции неизвестно.

С другой стороны, и я писал об этом ранее, недостатки GUID в данном контексте исправляются периодической переиндексацией.

Как в остальных крупных проектах мне неизвестно, но у меня GUID на всех таблицах (сущностях), которые могут участвовать в интеграции (включая репликацию), а это пользователи, заказы; а int - на незначащих таблицах. Например, разосланные e-mail, или записи в журнале событий, или классификаторы (словари), если нет натурального ключа, или идентификаторы объявлений...
...
Рейтинг: 0 / 0
Как организовать связь между звездой: Центральная база - Много второстепенных баз
    #38680274
Фотография javajdbc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m1andryjavajdbcЕсли нужны какие-то тонко-настроеные права
доступа, то имеет смысл создать отдельную колонку
created_by или,например source_db_id.
Вычислять на лету источник из ГУИД , я думаю, будет
небыстро (по сравнению с отдельной
проиндексированой колонкой)

Подскажете, какое Ваше мнение насчет UUID() в качестве PK?
Все-таки CHAR(30), насколько удачно применять строчный первичный ключ?
Не будет заметной потери в производительности, если есть куча JOIN ON ID=parentID?
И также куча таблиц-связок одна-ко-многим (ID1, ID2), опять же, занимаемое место, или можно пренебречь?


Волею судьбы у меня был только единичный
случай работы ГУИД, посему сравнивать не могу.

Мой пост был скорее про логику --
по вашим словам надо как то различать
записи пришедших в центр из разных баз.
Это дополнительная задача к очевидной задачи
уникальности ИД в интегрированом контексте.

Вариантов примерно 3:

1. ид -- ГУИД или ГУИД+сервер_ид, исходную базу расшифровывать из ГУИД
2. ид -- составнойй ключ = локальный автоинкремент и сервер_ид
3. ид -- ГУИД и отдельное поле сервер_ид

Вариант 1 мне кажется неуклюжим -- необходимо расшифровывать на лету, плохая производительность
Вариант 2. составной ключ не очень удобен для многих фрейворков.
Вариант 3 обеспечивает оба функционала -- возможно слегка избыточная информация
...
Рейтинг: 0 / 0
36 сообщений из 36, показаны все 2 страниц
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Как организовать связь между звездой: Центральная база - Много второстепенных баз
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]