У меня есть большая база данных MySQL, D_Big, с кучей данных в ней.У меня также есть сервис S1 с API, которые читают или пишут из этой базы данных.Например, один API может получить что-то из базы данных.Другой может записать строку в базу данных.и т.д.
У меня также есть небольшая вторичная база данных, D_Small, в которую S1 (и только S1) читает и пишет.Я хочу оставить небольшую вторичную базу данных в покое, но я хочу изменить способ доступа к данным из большой базы данных MySQL, D_Big.
Я хочу сделать так, чтобы единственный доступ к большой базе данных MySQLчерез вызовы API для второго сервиса, S2, который также имеет доступ к большой базе данных.Когда S1 хочет получить данные в D_big, он должен вызвать API в S2, которые будут возвращать данные в D_Big.Таким образом, я хочу удалить прямую зависимость S1 от D_Big.
Какие есть хорошие способы сделать это?Какие советы / советы?Кажется, что наиболее простым способом является замена каждого отдельного вызова API в S1, который напрямую обращается к D_Big, с API на соответствующий API в S2, который просто выполняет тот же самый доступ к базе данных, который S1 мог бы выполнить напрямую.Например, представьте, что у нас есть эти API в S1:
API_1 возвращает столбцы [foo, bar, baz] из table1 в D_Big
API_2 записывает значение foo в table2 в D_Big
API_3 возвращает столбцы * из table3 в D_Big
Я бы просто заменил их на:
API_1 в S1 вызывает соответствующий API в S2, который возвращает столбцы [foo, bar, baz] из table1 в D_Big
API_2 в S1 вызывает соответствующий API вS2, API_2 которого записывает значение foo в table2 в D_Big
API_3 в S1, вызывает соответствующий API в S2, который API_3 возвращает столбцы * из table3 в D_Big
Но как насчет случаев, когда идеальное отображение не один в один?Например, когда вам нужно объединить API (например, один API в S1 вызывает два разных API в S2 для получения необходимых данных, или два разных API в S1 вызывают один и тот же API в S2, но с разными параметрами)?
Как сделать хороший интерфейс, отделяющий две службы от того, что раньше было общим источником данных (D_Big)?Предположим, что и S1, и S2 используют систему на основе Java / XML / Spring для передачи данных через вызовы API.