Использование операторов SQL для запроса объектов в памяти - PullRequest
3 голосов
/ 04 августа 2009

Предположим, у меня есть коллекция объектов C ++ в памяти, и я хотел бы запросить их, используя оператор SQL. Я желаю реализовать некоторый тип интерфейса для предоставления свойств объектов, таких как столбцы строки базы данных. Есть ли библиотека для этого? По сути, я пытаюсь сделать что-то вроде LINQ без использования платформы .NET.

Ответы [ 3 ]

2 голосов
/ 04 августа 2009

Объекты C ++ - это не то же самое, что таблицы SQL.

Если вы хотите использовать синтаксис SQL для запроса объектов, сначала вам нужно отобразить / сохранить их в структуре таблицы (ORM, объектно-реляционное отображение). Помимо Linq. Существует целый ряд прекрасных решений ORM.

После того как ваши объекты представлены в таблицах SQL, вам следует обратиться к движку SQL, чтобы выполнить тяжелую работу. Большинство платформ SQL могут быть сконфигурированы для хранения таблицы в основном или всегда в памяти.

В качестве альтернативы вы можете рассмотреть систему, специально предназначенную для кэширования объектов. В Linux memcached - лучший выбор.

1 голос
/ 05 августа 2009

Существует ловушка между объектным миром и сущностно-реляционными данными (ER). Его называют Несоответствие объектно-реляционного импеданса . По сути, это означает, что вам необходимо «сопоставить» концепты объекта с концепциями реляционной базы данных, которые называются объектно-реляционным отображением (ORM).

Пример полиморфизма: производный класс не является понятием ER, поэтому необходимо сказать, например, что все атрибуты всех объектов, принадлежащих к одному и тому же классу, будут храниться в одной таблице со всеми атрибутами «родителей» ИЛИ производный класс (объект) будет храниться в той же таблице, что и абстрактный класс, из которого он получен.

Вероятно, было бы лучше использовать ORM, поддерживаемый сообществом, но когда мотивы верны, ваша компания может выиграть, имея собственное решение ORM.

В нашей компании мы разработали собственное решение ORM (началось 6 лет назад, поэтому оно было написано на c ++, а модельер был приложением для рабочего стола Windows). Но теперь мы, вероятно, будем использовать ADO.NET Entity Framework («старший» брат LINQ) или другой поддерживаемый ORM

0 голосов
/ 04 августа 2009

Я также искал что-то в этом роде, но, похоже, SQLlite - самый близкий, который я могу найти.

...