У нас дуже велика база даних на рівні підприємств. У рамках нашої бізнес-моделі всі користувачі Інтернету щомісяця потрапляють на наші веб-сервери, що, в свою чергу, забиває наш sql. Трафік дуже інтенсивний і продовжує зростати, чим більше зростає компанія. Проведена оптимізація sql proc, і апаратне забезпечення вже розширено до дуже високого рівня.
Зараз ми хочемо розширити базу даних, щоб гарантувати, що ми можемо впоратися з ростом компанії та майбутніми навантаженнями.
Ми вирішили, які конкретні дані слід оприлюднити. Це підмножина нашої бази даних, яка широко використовується.
Однак моє запитання стосується даних, що не мають шару, які є загальними / універсальними. Прикладом таких даних, наприклад, може бути таблиця з інвентаризацією або, можливо, таблиця працівника, таблиця користувача тощо.
Я бачу два варіанти обробки цих загальних / універсальних даних:
1) дизайн 1 - розміщення загальних / універсальних даних у зовнішній базі даних. Усі записи будуть відбуватися тут. Потім ці дані будуть реплікуватись вниз до кожного фрагмента, що дозволить кожному фрагменту прочитати ці дані та внутрішнє приєднання до цих даних у програмах t-sql.
2) дизайн 2 - Надайте кожному фрагменту власну копію всіх загальних / універсальних даних. Нехай кожен фрагмент записує локально до цих таблиць і використовує реплікацію sql злиття, щоб оновити / синхронізувати ці дані на всіх інших фрагментах.
побоювання щодо дизайну №1
1) Проблеми з транзакціями: Якщо у вас виникне ситуація, коли ви повинні записати або оновити дані в осколку, а потім записати / оновити загальну / універсальну таблицю в 1 збереженому примірнику, наприклад, ви більше не зможете це зробити легко. Дані тепер існують на окремих екземплярах і базах sql. Можливо, вам потрібно буде задіяти MS DTS, щоб побачити, чи можна вписати ці записи в транзакцію, оскільки вони знаходяться в окремій базі даних. Ефективність викликає занепокоєння, і можливі переписування можуть бути залучені для програм, які записують у фрагменти та загальні дані.
2) втрата референтної цілісності. Неможливо зробити референтну цілісність міжбазової бази даних.
3) Перекодування великих областей системи, щоб вона могла записувати загальні дані в нову універсальну базу даних, але читати загальні дані з фрагментів.
4). збільшені відключення бази даних. Як і №1 вище, коли ви стикаєтеся з ситуацією, в якій потрібно оновити розділені дані та загальні дані, ви збираєтеся здійснити це багаторазове подорож, оскільки ці дані зараз знаходяться в окремих базах даних. Тут є деякі затримки в мережі, але мене це питання не хвилює так, як вищезгадані 3.
побоювання щодо дизайну №2
У дизайні №2 кожен фрагмент отримує власний екземпляр усіх загальних / універсальних даних. Це означає, що весь код, який приєднується до або оновлює загальні дані, продовжує працювати / працювати так, як це відбувається сьогодні. Команда розробників вимагає дуже мало перекодування / переписування. Однак ця конструкція повністю залежить від реплікації злиття, щоб синхронізувати дані між усіма фрагментами. dbas є висококваліфікованими і дуже стурбовані тим, що реплікація злиття може не впоратися з цим, і якщо злиття реплікації не вдасться, що відновлення після цього відмови не є великим і може вплинути на нас дуже негативно.
Мені цікаво дізнатися, чи хтось пішов з дизайном варіант №2 Мені також цікаво дізнатись, чи переглядаю 3-й чи 4-й варіант дизайну, який я не бачу.
наперед дякую.