Использование встроенной БД (SQLite / SQL Compact) для передачи сообщений в приложении? - PullRequest
3 голосов
/ 27 апреля 2010

Просто из любопытства, для приложений, которые имеют довольно сложное дерево модулей, что-то вроде sqlite / sql compact edition будет хорошо работать для передачи сообщений?

Так что, если у меня есть модули, содержащие такие данные, как:

\ SubsystemA \ SubSubSysB \ ModuleB \ ModuleDataC, \ SubSystemB \ SubSubSystemC \ ModuleA \ ModuleDataX

Используя традиционную передачу / маршрутизацию сообщений, вы должны пройти через промежуточные модули, чтобы передать сообщение в ModuleB для запроса, скажем, ModuleDataC.

Вместо этого, если мы просто храним "\ SubsystemA \ SubSubSysB \ ModuleB \ ModuleDataC" в базе данных sqlite, получение этих данных так же просто, как запрос sql и не требует маршрутизации и передачи данных.

Кто-нибудь делал это раньше? Даже если нет, предвидите ли вы какие-либо проблемы и влияние на производительность? Единственное, что меня сейчас беспокоит, - это передача пользовательских типов, например если ModuleDataC представляет собой пользовательскую структуру данных или указатель, мне понадобится какой-то способ сохранить структуру данных в БД или сохранить указатель в БД.

Спасибо

JW

EDIT

Один случай использования, о котором я не задумывался, это когда вы хотите отправить сообщение от ModuleA к ModuleB, чтобы заставить ModuleB что-то сделать, а не просто получить / настроить данные. Можно ли сделать это с помощью встроенной БД? Я полагаю, что потребуется обратный вызов из БД, насколько это возможно?

Ответы [ 2 ]

3 голосов
/ 27 апреля 2010

Как указывалось в моем комментарии, это выглядит как идея Tuple Spaces , то есть своего рода общая постоянная «доска», где разные процессы могут читать или обновлять данные.

Обычно это часть некоторой распределенной системы, так что разрозненные потоки, процессы, сущности могут совместно использовать и координировать работу через пространство кортежей.

Использование "внутри" одной программы - это немного излишне, на мой взгляд, но, учитывая, что вы, очевидно, рассматриваете это как своего рода эксперимент Геданкена , оно вполне может стоить этого. *

Модель довольно проста, поэтому вы, вероятно, можете создать свою собственную версию, используя sqlite или любую другую встроенную БД. Существует версия на основе SQL, которая бесплатна , но похоже, что она не встраиваема и требует отдельных процессов клиент / сервер, поэтому это, вероятно, излишнее решение для вашей ситуации.

1 голос
/ 27 апреля 2010

Я не вижу причин, по которым это не сработает, но я думаю, что, вероятно, будет больше проблем, чем оно того стоит.Если у вас будет адаптер для каждого класса для доступа к БД, то вы также можете добавить слой сообщений, используя уже существующую библиотеку.Похоже, вы намекаете, что использование БД для размещения сообщений может быть менее сложным, чем библиотека сообщений ... я предполагаю, что это не так.Некоторые вопросы в моей голове:

  • Сколько сообщений хранится в БД?
  • Срок действия сообщения истекает?
  • Кто отвечает за очистку сообщения?
  • Как вы справляетесь с одновременными обновлениями?

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

Если бы я попытался это сделать, я бы обернул функции БД в несколько сообщений, таких как классы, чтобы вы могли легко заменить встроенную БД на что-то другое, если обнаружили, что БД болееБеда, чем это стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...