Форум программистов, компьютерный форум CyberForum.ru

PostgreSQL

Войти
Регистрация
Восстановить пароль
 
wolfalone
В экстазе
143 / 127 / 26
Регистрация: 05.08.2012
Сообщений: 653
Записей в блоге: 3
#1

Выбор метода хранения данных в БД - PostgreSQL

28.11.2016, 20:45. Просмотров 232. Ответов 1
Метки нет (Все метки)

Доброго времени суток уважаемые!

В своём прошлом вопросе, я спрашивал как разобрать массив "на запчасти", но придя к выводу, что это не оптимально, решил сменить стратегию хранения данных и вынести связанные данные в отдельную таблицу. Теперь пытаюсь понять, как правильно их (данные) в этой таблице хранить.

Суть проблемы примерно следующая:
Есть набор данных, привязанных к какой-то записи (строке). Эти данные имеют смешанный формат (строки, целые числа и дробные числа), по этому, хранятся они в формате VARCHAR.

В зависимости от условий, мы можем работать с этими данными либо как со строкой, либо как с целым. При этом, со строками в общей сложности проблем нет, но когда нужно найти все записи, например, в диапазоне между 10 и 100, например так:
SQL
1
... WHERE column1 >= AND column1 <= 100;
, возникает проблема того, что в выборку попадают в том числе и не числовые значения. Что бы решить эту проблему, бы придуман примерно такой запрос:
SQL
1
SELECT * FROM table1 WHERE column1 ~ E'^\\d+$' AND column1::INTEGER >= 10 AND column1 <= 100
который выбирал по регулярке только числовые значения, приводил их к целому и оперировал уже ими... И всё вроде бы хорошо, но меня смущает наличие регулярного выражения в запросе. Маленького, но всё же регулярного выражения.

В замен регулярного выражения я придумал два других варианта хранения данных:

Вариант 1. Описан выше (с регуляркой).

Вариант 2. Идея заключается в том, что бы создать дополнительное поле, в котором при сохранении либо указывать флаг (true/false) является ли значение числом, либо указывать тип данных (строка/целое/дробное), записывая тип при сохранении. И соответственно конвертировать только те значения, которые могут быть сконвертированы, не прогоняя каждое значение через регулярное выражение.

Вариант 3. Можно создать 2 (или 3) таблицы, в каждой из которых будет храниться свой тип данных (таблица для строк, таблица для целых, таблица для дробных) и соответственно, в зависимости от контекста запроса, искать данные по нужной таблице (тут ещё можно по всякому поизвращаться, на эту тему).

Собственно, вопрос. Какой из методов хранения будет наиболее оптимальным?

Данных много, примерно 1.5млн. записей и примерно 30млн. привязанных к ним свойств. Консистенция данных примерно такая: целые - 70%, строки - 20%, дробные - 10%.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.11.2016, 20:45     Выбор метода хранения данных в БД
Посмотрите здесь:

Выбор данных в зависимости от id - PostgreSQL
как преобразовать запросы вида SELECT &quot;F_Value&quot; FROM &quot;SC_Wonder&quot;.&quot;T_Passport&quot; where &quot;ID_Product&quot; = 2 SELECT ...

Выбор данных из нескольких таблиц - PostgreSQL
Имеются 2 таблицы: CREATE TABLE IF NOT EXISTS notes( /* 1 */ id SERIAL PRIMARY KEY UNIQUE, /* номер записи */ note...

выбор технологии хранения данных - C#
Здравствуйте! Я студент второго курса, учусь не совсем на программиста, но программирования достаточно много и со всем что мне преподавали...

Выбор способа хранения данных - Visual Basic
Имеется N ASCII-файлов, где 0 &lt; N &lt; 2000 (примерно). Размер каждого файла - произволен (от 1 кб до 10 мб). Необходимо все файлы хранить 'в...

Выбор места хранения данных - Программирование Android
Пока не очень представляю как это сделать в Андроиде, поэтому прошу дать направление в какую сторону копать. Изучил различные адаптеры и...

Выбор системы хранения базы данных - Серверы
Хотим купить серьезную систему хранения базы данных. Кто-нибудь сталкивался с этим? В прикрепленных файлах сравниние конкурентных...

.NET 4.x Выбор коллекции для хранения данных - C#
Люди прошу помощи и совета. Возникла необходимость в программе сменить тип коллекции хранения данных (сейчас используются списки типа...

Выбор подходящего способа хранения\обработки данных - C++
Здравствуйте! Передо мной встала задача выбора структуры данных, позволяющего хранить сортированные данные (в идеале позволяющая...

Инетересный вопрос: выбор способа хранения данных - Программирование
Разрабатывается IDE. Вопрос: сведения о параметрах компонентов лучше хранить в XML файле или разработать для этого иерархию классов, или и...

Выбор способа хранения данных для тестовой программы - Visual Basic .NET
Привет форумчане. Я хочу создать программу для прохождения тестов. Насколько я понимаю, вопросы и варианты ответов должны храниться в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grgdvo
537 / 478 / 137
Регистрация: 02.09.2012
Сообщений: 1,398
29.11.2016, 15:00     Выбор метода хранения данных в БД #2
Вариант 3 позволяет использовать дополнительные индексы на конкретные числовые, дробные или строковые данные, что может существенно ускорить поиск по сравнению с Вариантом 2, в котором такие индексы не создашь, так как все лежит в тексте. Поэтому если важна скорость выборки конкретных данных, то лучше вариант 3.
Также Вариант 3 всегда можно привести к Вариант 2 дополнительным представлением, если это вообще требуется.
Однако, неудобство Варианта 2 состоит в усложнении процесса формирования поискового запроса.
Если последнее не доставляет неудобства, то я голосую за Вариант 3
Yandex
Объявления
29.11.2016, 15:00     Выбор метода хранения данных в БД
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru