172 похожих чатов

Приветствую всех!!! Может кто дать дельный совет по организации структуры! Необходимо собрать

сервер адресный за основу взята ГАР (государственная адресная система).
В архиве 92 папки + Байконур. В каждой папке по 18 xml файлов. Внутреннюю структуру я более-менее знаю, так как общался со старой базой ФИАС (которая ушла в небытие или уйдет) и сейчас требуется перейти на новый стандарт.
Раньше ФИАС крутился на MySQL - но я хочу попробовать PostgreSQL в бою.
Например: есть xml файл "adr_obj" в нем хранятся субъект, города, поселки, улицы и т.д. Соответственно имеется ID и OBJECTID - которые м/у собой связывают строки в рамках одной таблицы в связи с чем можно собрать полный адрес: "Субъект, город, улица" просто написав функцию и дернув функцию получаем в переменную адрес полный. Опытным путем было выявлено, что дергать данные через функции быстрее чем делать кучу запросов из backend (например: при получении полного адреса).
В файле "adr_obj" нет столбца регионID, cityID, streetID - но раньше я делал процедуру и на уровне БД в MySQL проставлял ID всех элементов, что позволяло удобно делать запросы в БД. Это удобно так как в нашем государстве может у адреса например: не быть улицы, или не быть поселка.
Вся БД весит 272 ГБ в виде xml - она ужмется при переносе, но все равно будет достаточно объемной - поиск будет долгим без индекса.

И вот у меня есть 3 варианта:
1. Наделать таблиц adr_obj_[код региона] получиться 93 таблицы и объединить данные в представлении. Но встает вопрос можно ли по представлению делать индексы?
В этом случае сперва можно будет определить регион (или регионы), а потом делать запросы в меньшего размером таблицу соответствующего региона.
При таком подходе таблиц будет 18 * 93 = 1674 таблицы, потому что есть еще таблицы HOUSE (дома) ROOMS (квартиры). Т.е. от 1674 таблиц.
2. Или все таки, как раньше сделать, все 93 файла xml импортировать в одну таблицу adr_obj - она будет большая длинная, селективность низкая.
3. Еще можно полностью переконфигурировать подход и поднять селективность через дополнительную связывающую таблицу (-ы), например "улица Ленина" - есть в каждом городе и поселке. Сделать это для запросов с LIKE где ищем по названию. Но есть и факторы усложняю данный подход, так как может быть "бульвар Ленина". Вообще все улицы в нашей преимущественно православной стране повторяются. Уникальных названий не так много по старой тестовой БД 1512420 (не все регионы вроде там) из них уникальных значений [тип элемента инфраструктуры] + [название элемента инфраструкты] получается 414360 - т.е. в три раза.

С одной стороны одна таблица удобна.
Сценариев эксплуатации адресного сервера много. И у меня тут зоопарк из разных скриптов на разных языках сделанные разными людьми, один разбирает адрес из строки, другой выдает на основе адреса данные статистики. И я хочу все переписать на нативный rest php (а все что возможно в силу синтаксиса сделать силами самой БД). Хочу убрать остальной зоопарк - унифицировать подход к получению данных.

Вот сижу голову ломаю. Заранее благодарю за советы.

1 ответов

12 просмотров

Пункт 3 точно не надо делать, а пункт 2 вполне. Одна таблица, все индексы которой начинаются с region_id лучше, чем 93 таблицы

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
70
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
25
Книга Юрова В.И пойдёт для обучения?
Botsman
24
Люди добрые, помогите с идеями, потому что свои закончились. У клиента падает софтина в момент инициализации модуля OtlEventMonitor на RegisterWindowMessage('Gp/OtlTaskEvents/...
Михаил Усков
7
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
> Примечательно, что новый владелец удаляет из GitHub любые жалобы, указывающие на подозрительную активность или смену владельца, и, видимо, рассчитывает на то, что пользовате...
Alex Sherbakov
2
GridView fully ignored first parent(SizedBox), and take width from second parent(Container). How can I constrain GridView by first parent? Widget build(BuildContext context) {...
Hamster
1
Hey there Which is the best Linux destro for developers (coding)? To my research on reddit, they said Linux mint is good for mid level spec and Ubuntu for high Lev hardwar...
Wiz 🪄
11
Подскажите пожалуйста, а я могу вот такую штуку использовать? rpc, только реализованное в реббите https://www.rabbitmq.com/tutorials/tutorial-six-php ( или https://habr.com/ru...
Artyom
11
И ещё вопрос: можно ли типа как на дос как-то запариться и с помощью прерываний выводить текст, вместо функции printf ?
НѣкъиⰘижєжєиꙁъвьсєсвѣтьноѣсѣтиѥсть•
34
Карта сайта