Какую структуру данных использовать для хранения кэшированного SQL-запроса? - PullRequest
3 голосов
/ 04 ноября 2011

Я хочу использовать такую ​​структуру данных:

  building string  (indexed)
  date     TDate   (indexed)
  room_id  integer (indexed)
  measurement_data -> various fields

Чтобы изменить запрос к базе данных на удаленном сервере SQL.

Таким образом, мне нужно всего лишь один раз запросить базу данных для данного здания, и я могу использовать промежуточное программное обеспечение Delphi для передачи отдельных элементов данных бэкэнду.

Какую структуру данных вы бы порекомендовали для хранения этого материала, чтобы я мог быстро извлекать элементы данных.

Я думал о том, чтобы поместить его в класс с перечисленными выше элементами и поместить объекты в TStringList, но тогда у меня будет только 1 индекс для данных. Поскольку я в основном беру отдельные предметы, я не хочу использовать клиентскую базу данных.
Есть ли лучший вариант TList, который позволит мне быстро получить элемент.

Другими словами, TStringlist (с прикрепленными) объектами допускает только один индекс. (строка) есть лучший список, который позволит несколько индексов?

EDIT
TCollection звучит намного лучше, это хорошая идея?

Ответы [ 2 ]

8 голосов
/ 04 ноября 2011

В одном из моих старых проектов (вокруг Delphi 7) я сделал это, имея несколько TList хранящих указатели на записи.Один из списков владеет элементами и отвечает за очистку, другие указывают на одни и те же элементы, но каждый список сортируется по-разному, служа индексами для поиска в двоичном поиске.Кроме их порядка, списки идентичны и синхронизируются - добавление элемента добавляет его во все списки, удаление элемента удаляет из всех списков.

Другим вариантом будет использование TClientDataSet или другое внабор данных с поддержкой индексирования.

1 голос
/ 04 ноября 2011

Может быть: SynBigTable a быстрая таблица «в памяти» с полями, индексами и поиском.

...