[MSSQL]Как лучше всего хранить текущие навигационные данные
От: Sshur Россия http://shurygin-sergey.livejournal.com
Дата: 24.07.09 10:24
Оценка:
Привет, all!

Собственно, обычная система, собирающая данные о положении с подвижных объектов с использованием GPS. Существует таблица, куда складываются координаты. Сервер в эту таблицу только пишет, клиенты только читают. Задачи — получить текущие координаты устройств (то есть, последние) и историю. Если с историей все понятно, то с текущими коодинатами есть вопрос. Понятно, что есть куча вариантов как это сделать, и хочется выбрать наилучший с точки зрения производительности и масштабируемости.

Вариант 1 — одна таблица с историей, текущие данные получаются при помощи select top 1 * from... order by. При наличии индексов работает нормально. Из плюсов — мало возможностей получить дедлок, так как при чтении и записи по индексу блокироваться будет только одна запись и они будут разными для клиента и для сервера.

Вариант 2 — отдельная таблица с текущими координатами. При добавлении новой записи в историю сервер обновляет соответствующую запись в текущей таблице. Смущает, что в этом случае и сервер и клиент могут одновременно обратиться к одной и той же записи — потенциальная проблема с производительностью из-за блокировок.


Вариант 3 — аналогично 2-му, но с версионностью — то есть в случае, если сервер и клиент одновременно обратились к одной и той же записи, то клиент получает предыдущую версию, а сервер пишет в новую. Честно говоря, не уверен что это пройдет с MSSQl даже на уровне изоляции транзакций SNAPSHOT.

Итак, как лучше? может есть другой вариант?
Шурыгин Сергей

"Не следует преумножать сущности сверх необходимости" (с) Оккам
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.