2010-01-19 3 views
0

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

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

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

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

Thanks

ответ

1

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

1

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

1

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

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

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

Смежные вопросы