Общая память доступна как транспорт данных для поставщиков SQL и обратно. Вам не нужно писать никакого дополнительного кода для этого, если вы используете встроенные драйверы для доступа к вашему провайдеру. Вместо этого вы просто сконфигурируете драйвер и сервер для его использования, и ваше приложение должно будет находиться на том же сервере, что и ваш поставщик SQL.
Драйверы ODBC для Windows поддерживают совместную память для операций SQL. Чтобы написать код для них из C, вы должны использовать ODBC API для связи с вашим провайдером. Вот ссылка со ссылкой на функцию.
Обзор функций ODBC @ MSDN
Также обратите внимание, что существует поддержка BLOB для всех поставщиков SQL, которые могут обрабатывать произвольные двоичные данные. Список типов, известных ODBC API, доступен здесь. Нет строгого требования, чтобы результаты вашего заявления были выражены в табличной форме.
Типы данных SQL @ MSDN
С другой стороны, если вас интересует взаимодействие с внутренними сущностями SQL на ваших собственных условиях, вы можете соединить что-то вместе через расширения используемой вами службы SQL. Например, MS SQL Server позволяет расширения с помощью процедур автоматизации Ole или интеграции CLR (.net) (доступно в MS SQL Server). Вы могли бы потенциально использовать их для общения вне группы. Тем не менее, ни один из них не может быть легко создан с помощью чистого решения С.
Процедуры автоматизации Ole в SQL Server @ MSDN
Интеграция CLR в SQL Server @ MSDN
Однако я рекомендую вам избегать этого, поскольку вы обнаружите, что вы находитесь в зависимости от среды службы хоста и, возможно, не сможете участвовать в транзакциях.
Если требования к размеру набора данных настолько велики, что вы считаете ОЗУ и прямой доступ лучшим вариантом, ваши потребности, вероятно, будут лучше удовлетворены, если будут сообщаться только те части, которые изменяются в наборе данных, хранящемся вне SQL. Кроме того, поскольку решение с разделяемой памятью ограничено одной машиной, вы, вероятно, захотите разделить работу над набором данных на несколько машин. Более вероятно, что вы увидите улучшение производительности / производительности с помощью таких средств, чем при изменении способа обращения к данным в SQL.
И, наконец, сложно указать поставщику SQL, что ему следует избегать использования хранилища файловой системы. Для MS SQL Server одним из возможных вариантов является принудительное размещение базы данных tempdb в оперативной памяти. Вот статья КБ с более подробной информацией. Другие СУБД могут иметь аналогичные параметры конфигурации.
INF: Когда использовать базу данных tempdb в RAM
Однако использование дискового хранилища не обязательно вызывает беспокойство. Я не могу найти хороший пример того, как поставщики SQL управляют балансом ОЗУ / файловой системы, но один хороший аналог для сервера SQL - это то, как окна влияют на использование файла подкачки. Вот отличная ссылка, которая детализирует, как окна ведут себя при высоких лимитах работы, и как использование памяти не обязательно соответствует переполнению использования диска. Также обратите внимание, что приложения, написанные для запуска в Windows, также оказываются неблагоприятными, когда работа хоста приближается к этим пределам.
Расширение границ Windows: виртуальная память @ TechNet