Синхронизация indexedDB с базой данных mysql

Я собираюсь разработать приложение, в котором сотрудники будут обслуживать ремонтные машины на территории клиента. Им необходимо пополнить сервисную карту с помощью планшета или любого другого мобильного устройства. В случае отсутствия подключения к Интернету я думаю об использовании автономного хранилища HTML5, в основном IndexedDB, для локального хранения данных служебной карты (веб-формы) и выполнения синхронизации в офисе, где есть Интернет. Синхронизация с базой данных MySQL.

Итак, вопрос: можно ли синхронизировать indexedDB с mysql? Я никогда не работал с indexedDB, я только занимаюсь исследованиями и вижу, что это потенциал.

Web SQL устарел. В противном случае это могло быть более близкое решение.

Есть ли другие альтернативы, если вышеперечисленное сложно или выходит за рамки стандарта?

Ваше мнение высоко ценится.

Спасибо.


person blaise    schedule 16.08.2013    source источник
comment
можно ли синхронизировать indexedDB с mysql? Да, это. Если на самом деле вопрос в том, как, вам нужно будет предоставить некоторые более конкретные детали о дизайне вашего приложения ...   -  person Sylvain Leroux    schedule 16.08.2013
comment
Я еще не понял, как это сделать. Я просто ищу возможные решения. Меня беспокоило несоответствие или головная боль объектной природы данных в indexeddb по сравнению с реляционной базой данных в mysql. Любой предыдущий опыт в этом приветствуется.   -  person blaise    schedule 16.08.2013


Ответы (3)


Это определенно возможно. Последние пару дней я только начинаю изучать indexeddb. Вот как я бы это увидел. Извините, у меня нет кода.

  1. Сайт как-то знает, что находится в офлайн-режиме
  2. При нажатии на форму отправки данные сохраняются в indexeddb.
  3. Позже ноутбук или что-то еще снова в сети или в интрасети и теперь может разговаривать с основным сервером, отправляет все строки indexeddb на сервер для хранения в mysql через вызов ajax.
  4. indexeddb очищается
  5. повторение
person Carlhako    schedule 20.08.2013
comment
вы можете легко получить данные из indexeddb, затем закодировать json, передать их на php, а затем вставить непосредственно в базу данных. - person Carlhako; 20.08.2013
comment
Спасибо Карлхако. Позвольте мне рассказать вам о том, что я собираюсь использовать: Django / mysql для внутреннего внутреннего сервера. IndexedDB для автономного хранилища, и я подумал, что это может быть решением, чтобы использовать лакомство для создания веб-службы для синхронизации. Я еще не уверен в вкусном пироге, если это правильный выбор или AJAX лучше. - person blaise; 22.08.2013

Немного поздно, но я надеюсь, что это поможет.

Это возможно, но я не уверен, что это лучший выбор. Я могу сказать вам, что я создаю веб-приложение, в котором у меня есть база данных mysql, и приложение должно работать в автономном режиме и отслеживать данные. Я пытаюсь использовать indexedDB, и это меня очень сбивало с толку, поэтому я реализовал DexieJs, минималистичный и простой API для простого общения с indexedDB. Теперь приложение работает в сети, а если оно выходит из строя, оно работает в автономном режиме, пока не вернется в Интернет, а затем загрузит данные в базу данных mysql. Одно из решений, которые я прочитал для сохранения данных, заключалось в том, чтобы сохранить в поле ТЕКСТ объект json, переданный в JSON.stringify(), и как только вам понадобятся данные обратно JSON.parse(). Это было моей мотивацией создать приложение таким образом, а также то, что мы не могли изменить базу данных:
Руководство по IndexedDB
Синхронизация IndexedDB с MySQL
Подключить узел к mysql

person GabouhSk8    schedule 20.01.2015
comment
когда я использую JSON.stringify (), у меня возникают проблемы с датой, поэтому я обычно избегаю этого подхода. - person Ananda; 29.11.2017

[Обновление 2021 года]

Всем, кто читает это, я могу порекомендовать попробовать AceBase. AceBase - это база данных в реальном времени, которая обеспечивает удобное хранение и синхронизацию между базами данных браузера и сервера. Он использует IndexedDB в браузере и свой собственный двоичный формат db или хранилище SQL Server / SQLite на стороне сервера. Хранилище MySQL также находится в планах. Автономные правки синхронизируются при повторном подключении, и клиенты уведомляются об изменениях удаленной базы данных в реальном времени через веб-сокет (БЫСТРО!).

Вдобавок ко всему, AceBase имеет уникальную функцию, называемую прокси-серверами данных в реальном времени, которая позволяет вам сохранять все изменения в объектах в памяти и синхронизировать их с локальными и серверными базами данных, поэтому вы можете полностью забыть о кодировании базы данных и программировать как если бы вы используете только локальные объекты. Неважно, в сети вы или офлайн.

В следующем примере показано, как создать локальную базу данных IndexedDB в браузере, как подключиться к удаленному серверу базы данных, который синхронизируется с локальной базой данных, и как создать прокси-сервер данных в реальном времени, который полностью исключает дальнейшее кодирование базы данных.

const { AceBaseClient } = require('acebase-client');
const { AceBase } = require('acebase');

// Create local database with IndexedDB storage:
const cacheDb = AceBase.WithIndexedDB('mydb-local');

// Connect to server database, use local db for offline storage:
const db = new AceBaseClient({ dbname: 'mydb', host: 'db.myproject.com', port: 443, https: true, cache: { db: cacheDb } });

// Wait for remote database to be connected, or ready to use when offline:
db.ready(async () => {

    // Create live data proxy for a chat:
    const emptyChat = { title: 'New chat', messages: {} };
    const proxy = await db.ref('chats/chatid1').proxy(emptyChat);  // Use emptyChat if chat node doesn't exist

    // Get object reference containing live data:
    const chat = proxy.value;

    // Update chat's properties to save to local database, 
    // sync to server AND all other clients monitoring this chat in realtime:
    chat.title = `Changing the title`;
    chat.messages.push({ 
        from: 'ewout', 
        sent: new Date(),
        text: `Sending a message that is stored in the database and synced automatically was never this easy!` +
              `This message might have been sent while we were offline. Who knows!`
    });

    // To monitor realtime changes to the chat:
    chat.onChanged((val, prev, isRemoteChange, context) => {
        if (val.title !== prev.title) { 
            console.log(`Chat title changed to ${val.title} by ${isRemoteChange ? 'us' : 'someone else'}`); 
        }
    });
});

Для получения дополнительных примеров и документации см. ядро ​​базы данных реального времени AceBase на npmjs.com.

person Ewout Stortenbeker    schedule 18.03.2021