дизайн базы данных и производительность - PullRequest
0 голосов
/ 19 января 2010

У меня есть вопрос относительно производительности базы данных в целом. Я использую Sqlite, но предполагаю, что замечания по производительности применимы ко всем реляционным базам данных?

У меня есть база данных, которая содержит таблицу, в которой хранятся данные о 200 переменных. Я пишу около 50 переменных в секунду в таблицу. Записанная переменная содержит идентификатор переменной, значение и метку времени. Повторное выполнение выполняется очень редко, но должно быть максимально быстрым, чтобы получить данные по переменной в хронологическом порядке. Когда я делаю запрос, мне всегда нужно получить данные 1 переменной.

Как мне спроектировать базу данных, чтобы чтение было максимально быстрым: 1. Я делаю 1 табель, который содержит все переменные. Переменная хранится как идентификатор Индексирую таблицу по id и отметка времени. Плохая часть в том, что индекс замедляет запись (r). 2. Я делаю 200 таблиц для каждой переменной и индексировать метку времени.

Я думаю, что второе решение является наиболее эффективным, но создание таблицы для каждой переменной кажется неправильным. Кто-нибудь может дать мне совет?

Спасибо

Ответы [ 3 ]

1 голос
/ 19 января 2010

Если вы используете реляционную базу данных, я предполагаю, что все эти переменные связаны? Если это просто значения, например, настройки, тогда, возможно, файл или что-то подобное может быть лучше.

Если вам когда-либо придется запрашивать значения только для ОДНОЙ переменной, то, если вы настаиваете на использовании базы данных (что может быть не плохо!), Вам следует создать одну таблицу для каждой переменной: id (беззнаковое целое, автоинкремент, первичный ключ) отметка времени (datetime) переменная (какой бы она ни была)

Не экономьте на данных только потому, что «это может занять больше места на жестком диске» - это только приводит к проблемам.

1 голос
/ 19 января 2010

Если вы действительно хотите использовать базу данных, используйте первый подход, но убедитесь, что вы вставляете свои данные в одну транзакцию; тесты показывают, что это делает написание намного быстрее. Ваши поиски выполняются по имени переменной / идентификатору И отметке времени или только по имени переменной. Индексирование по временной метке может не потребоваться ...

1 голос
/ 19 января 2010

Вы уверены, что вам нужна база данных? Судя по всему, плоский файл будет работать достаточно хорошо для вас, и вы не будете звучать так, будто вам действительно нужны какие-либо атрибуты базы данных. Просто создайте плоский файл для каждой переменной и держите маркеры для каждого открытого. Пишите им через ваш стандартный буферизованный ввод-вывод так часто, как вам нужно. Чтобы прочитать, просто откройте один файл и десериализуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...