Движок SQL для данных в памяти
От: ic69  
Дата: 18.10.06 13:18
Оценка:
Пишется приложение, в котором данные создаются динамически, хранятся в нескольких hashtable и таблички эти имеют реляционные связи. Ну просто база данных какая-то. Данных для отображения относительно много — 4 таблички по нескольку тысяч записей в каждой. Для поиска по ним и реализации фильтров для отображения пришлось написать свой наколенный SQL, но так как колонки в "таблицах" могут динамически добавляться, пришлось делать это через Reflection и искать по имени свойства — работает медленно, на наших объемах данных — по 5 секунд.
Может, кто-то подскажет выход? Может есть движки SQL для данных в памяти? Только не Linq — она еще бэта.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re: Движок SQL для данных в памяти
От: Igor S Mandrigin Россия
Дата: 18.10.06 14:31
Оценка:
Здравствуйте, ic69, Вы писали:

I>Пишется приложение, в котором данные создаются динамически, хранятся в нескольких hashtable и таблички эти имеют реляционные связи. Ну просто база данных какая-то. Данных для отображения относительно много — 4 таблички по нескольку тысяч записей в каждой. Для поиска по ним и реализации фильтров для отображения пришлось написать свой наколенный SQL, но так как колонки в "таблицах" могут динамически добавляться, пришлось делать это через Reflection и искать по имени свойства — работает медленно, на наших объемах данных — по 5 секунд.

I>Может, кто-то подскажет выход? Может есть движки SQL для данных в памяти? Только не Linq — она еще бэта.

Попробуй DataSet, DataTable итд...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Движок SQL для данных в памяти
От: ic69  
Дата: 19.10.06 08:51
Оценка:
Здравствуйте, Igor S Mandrigin, Вы писали:

ISM>Попробуй DataSet, DataTable итд...


Виноват, не до конца описал задачу. Делов том, что данные все время меняются — есть поток обновлений, который меняет значения полей объектов, хранящихся в hashtable. В этом и проблема — выполнив запрос, например — отбор по какому-то фильтру, нужно получить не статическую копию наборов полей объектов по состоянию на момент запроса, а ссылки на объекты, которые удовлетворяли запросу. После чего показать это в окошке, и данные должны там продолжать изменяться. То есть подход базы данных, когда результат SELECT есть новая таблица с копией записей, не подходит. А вот писать свою реализацию SELECT тоже кажется лишним — может, есть именно запросные движки над таблицей объектов?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Re[3]: Движок SQL для данных в памяти
От: снежок Россия  
Дата: 19.10.06 08:59
Оценка:
Здравствуйте, ic69, Вы писали:

I>Здравствуйте, Igor S Mandrigin, Вы писали:


ISM>>Попробуй DataSet, DataTable итд...


I>Виноват, не до конца описал задачу. Делов том, что данные все время меняются — есть поток обновлений, который меняет значения полей объектов, хранящихся в hashtable. В этом и проблема — выполнив запрос, например — отбор по какому-то фильтру, нужно получить не статическую копию наборов полей объектов по состоянию на момент запроса, а ссылки на объекты, которые удовлетворяли запросу. После чего показать это в окошке, и данные должны там продолжать изменяться. То есть подход базы данных, когда результат SELECT есть новая таблица с копией записей, не подходит. А вот писать свою реализацию SELECT тоже кажется лишним — может, есть именно запросные движки над таблицей объектов?

Прямо в DataSet-е данные меняйте. Вам же ответили...
А запросы и отображение на форме в отдельный поток вынесите.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Движок SQL для данных в памяти
От: ic69  
Дата: 19.10.06 11:16
Оценка:
С>Прямо в DataSet-е данные меняйте. Вам же ответили...
С>А запросы и отображение на форме в отдельный поток вынесите.

Спасибо, это мой старое восприятие SQL помешало.
Посмотрел внимательнее — действительно, DataTable.Select(...), например, возвращает DataRow[] как ссылки на те же элементы таблицы, так что все работает ровно как хочется. И, насколько я понял, можно просто использовать DataView для отображения в DataGrid.
Короче, разобрался, спасибо. Осталось потестировать скорость.
... << RSDN@Home 1.2.0 alpha rev. 0>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.