Sqlite на облачной базе в Livecode для централизованной базы данных

Я работаю над приложением livecode. В котором мне нужно использовать облачный sqlite, что означает, что он должен быть доступен для всех пользователей. Сейчас я использую sqlite для локального, но я думаю, что он будет работать только для одного приложения устройства, хотя это у каждого пользователя будет своя собственная база данных. Но я хочу поделиться одной базой данных со всеми пользователями. Некоторые предлагают мне использовать синтаксический анализ JSON для удаленной базы данных. http://lessons.runrev.com/s/lessons/m/4071/l/7003-connecting-to-a-mysql-database. Эта база данных mysql доступна через URL-адрес, имя пользователя и пароль из Интернета. Нет никакого Json разбор вон там. Возможно ли это в случае с Sqlite? Пожалуйста помоги


person Rohit Bhardwaj    schedule 06.08.2013    source источник


Ответы (2)


Вы можете использовать SQLite с несколькими клиентами, если вы напишете для него сервер. Обратите внимание, что, вероятно, проще просто использовать сервер MySQL или PostgreSQL, даже если их строгая типизация раздражает.

Для сетевого SQLite вам нужен сервер, который получает данные от клиентов через сокетное соединение. Таким образом, в основном у вас будет одна программа LiveCode, которая передает SQL-запросы, которые она получает по сети. Очень упрощенный пример (непроверенный):

сервер:

on mouseUp
  accept connections on port 8080 with message "queryMessage"
end mouseUp

on queryMessage theIP
  read from socket theIP until return
  put it into mySQL
  delete char -1 of mySQL --remove trailing return that was added for network protocol
  put revOpenDatabase("SQLite","path/to/myDatabase.sqlite",,,) into connectionID
  put revDataFromQuery(,,connectionID,mySQL) into myResult
  revCloseDatabase connectionID
  write length(myResult) & return & myResult to socket theIP --no return needed, length based
  close socket theIP
end queryMessage

клиент:

on mouseUp
  -- make sure to know what IP the server is running from!
  -- the number after ":" is the port
  put "localhost:8080" into myIP
  open socket to myIP
  write "SELECT * FROM tableName" & return to socket myIP
  read from socket myIP until return
  put it into returnStringLength
  read from socket myIP for returnStringLength chars
  put it into field "the sql query result"
  close socket myIP
end mouseUp

Вам необходимо дополнительно:

  • Способы обработки таких команд, как INSERT, PRAGMA и т. д. (в основном revExecuteSQL)
  • Отчет об ошибках SQL/обработка
  • Сообщение/обработка ошибок сокетов
  • Если общедоступный, вам нужна безопасность!
  • Регистрация того, кто запрашивает и что происходит

Я использовал этот подход только с 4-8 клиентами, поэтому я не знаю, насколько хорошо он масштабируется для больших клиентских баз. Обратите внимание, что в этом сценарии «сервер» не запускается на общем веб-хосте (например, веб-странице), а вместо этого является «обычной» программой на компьютере в той же локальной сети (пример, предназначенный для запуска на том же компьютере, что и клиент). для этого через Интернет обычно требуется переадресация портов на маршрутизаторе или брандмауэре, поэтому это немного сложнее настроить, но также возможно.

Не забудьте найти команды, используемые в примере, в словаре.

person BvG    schedule 08.08.2013

SQLite разработан как локальная файловая база данных для одного пользователя, поэтому он не подходит для вашего приложения. Существует множество вариантов облачного хранения данных. Вы могли бы, если хотите подключиться напрямую к удаленному серверу базы данных, такому как MySQL, но это означает включение удаленного доступа, что представляет угрозу безопасности. Если вам нужно получить доступ к базе данных только с ограниченного набора IP-адресов, то, вероятно, стоит подумать, но использовать SSL и пользователя с ограниченными привилегиями.

Я не знаю, как JSON был задействован, но вы можете использовать веб-сервер + сценарии на стороне сервера для создания API, который возвращает объекты JSON. Это более безопасный подход, чем удаленный доступ. Есть и другие варианты... Возможно, вам подойдет Amazon Web Services SimpleDB.

person Monte Goulding    schedule 06.08.2013