#sql #delphi #delphi-2007
#sql #delphi #delphi-2007
Вопрос:
Я хочу использовать структуру данных, подобную этой:
building string (indexed)
date TDate (indexed)
room_id integer (indexed)
measurement_data -> various fields
Чтобы изменить запрос к базе данных, который находится на удаленном сервере SQL.
Таким образом, мне нужно запросить базу данных только один раз для данного здания, и я могу использовать приложение промежуточного программного обеспечения Delphi для передачи отдельных элементов данных в серверную часть.
Какую структуру данных вы бы порекомендовали для хранения этого материала, чтобы я мог быстро извлекать элементы данных?
Я думал поместить его в класс с вышеупомянутыми элементами и поместить объекты в TStringList, но тогда у меня есть только 1 индекс для данных.
Поскольку я в основном извлекаю отдельные элементы, я не хочу использовать клиентскую базу данных.
Есть ли лучший вариант TList, который позволит мне быстро получить элемент.
Другими словами, TStringlist
(с прикрепленными) объектами допускается только один индекс. (строка) есть ли лучший список, который допускает несколько индексов?
Редактировать
TCollection
звучит намного лучше, это хорошая идея?
Комментарии:
1. TClientDataSet в данном случае не является чрезмерной разработкой
2. TClientDataSet работает как шарм и делает то, что мне нужно, особенно. поскольку у него есть findnearest. Он заполняет лист Excel, интерполируя пропущенные значения в рекордно короткие сроки. Посмотрим, как решаются проблемы со скоростью при масштабировании приложения.
3. KbMemTable также должен быть хорошим выбором…
Ответ №1:
В одном из моих старых проектов (около Delphi 7) я сделал это, имея несколько TList
s, хранящих указатели на записи. Один из списков владеет элементами и отвечает за очистку, другие указывают на одни и те же элементы, но каждый список сортируется по-разному, служа индексами для двоичного поиска. Кроме их порядка, списки идентичны и синхронизируются — добавление элемента добавляется ко всем спискам, удаление элемента удаляется из всех списков.
Другим вариантом было бы использовать TClientDataSet
или другой набор данных в памяти с поддержкой индексации.
Комментарии:
1. Решил использовать TClientDataSet. Похоже на правильное решение проблемы.
Ответ №2:
Может быть: SynBigTable быстрая таблица «в памяти» с полями, индексами и поиском.
Комментарии:
1. Рассмотрю это, когда у меня будет время, пока я использую TClientDataSet. просто потому, что это то, что входит в стандартную комплектацию delphi.
2. @Johan : Хороший выбор, я использую вместо этого SynBigTable для повышения производительности, но, похоже, это не проблема с вашим приложением.
3. оказывается, ClientDataSet не поддерживает более 200 000 записей, поэтому я возвращаюсь к чертежной доске :-). Давайте посмотрим, как работает эта SynBigTable.
4. @Johan SynBigTable поддерживает миллионы записей и работает довольно быстро.