12

私は、従業員が顧客の施設で修理機械にサービスを提供するアプリケーションを開発しようとしています。タブレットまたはその他のモバイル デバイスを使用して、サービス カードに入力する必要があります。インターネット接続がない場合は、HTML5 オフライン ストレージ、主に IndexedDB を使用してサービス カード (Web フォーム) データをローカルに保存し、インターネットが存在するオフィスで同期を行うことを考えています。同期は MySQL データベースとの同期です。

質問: indexedDB を mysql と同期することは可能ですか? 私は indexedDB を使用したことがありません。私は調査を行っているだけで、可能性があることを確認しました。

Web SQL は非推奨です。そうでなければ、それはより近い解決策だったかもしれません。

上記が難しい、または標準外の場合の他の代替手段はありますか?

ご意見をお待ちしております。

ありがとう。

4

3 に答える 3

5

これは間違いなくできます。ここ数日、indexeddb を学び始めたばかりです。これは、私がそれが機能しているのを見る方法です。申し訳ありませんが、あなたに与えるコードがありません。

  1. Web サイトがオフライン モードであることを何らかの形で認識している
  2. 送信フォームをクリックすると、データが indexeddb に保存されます
  3. 後でラップトップまたはオンラインまたはイントラネットに戻り、メインサーバーと通信できるようになったものは、すべての indexeddb 行をサーバーに送信し、ajax 呼び出しを介して mysql に格納します。
  4. indexeddb がクリアされます
  5. 繰り返す
于 2013-08-20T11:01:08.340 に答える
3

少し遅くなりましたが、お役に立てれば幸いです。

これは可能ですが、最良の選択かどうかはわかりません。mysql データベースがあり、アプリがオフラインで動作し、データのトレースを保持する必要がある webapp を構築していると言えます。私は indexedDB を使用しようとしましたが、非常に混乱したので、 indexedDB と簡単に通信するための最小限で単純な API であるDexieJsを実装しました。現在、アプリはオンラインで動作しており、インターネットがダウンした場合は、インターネットが回復するまでオフラインで動作し、データを mysql データベースにアップロードします。データを保存するために私が読んだ解決策の 1 つは、json オブジェクトが渡された TEXT フィールドに格納するJSON.stringify()ことでしたJSON.parse()。これは、その方法でアプリを構築する私の動機であり、データベースを変更できなかったことでもあります:
IndexedDB チュートリアル
MySQL Connect ノードを使用してIndexedDB を mysql に同期する

于 2015-01-20T03:37:13.510 に答える
3

2021年更新

これを読んでいる人は、 AceBaseをチェックすることをお勧めします。AceBase は、ブラウザ データベースとサーバー データベースの間での保存と同期を容易にするリアルタイム データベースです。ブラウザーでは IndexedDB を使用し、サーバー側では独自のバイナリ db 形式または SQL Server / SQLite ストレージを使用します。MySQL ストレージもロードマップに含まれています。オフライン編集は再接続時に同期され、クライアントは Websocket (高速!) を通じてリモート データベースの変更をリアルタイムで通知されます。

これに加えて、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'}`); 
        }
    });
});

その他の例とドキュメントについては、 npmjs.com のAceBase リアルタイム データベース エンジンを参照してください。

于 2021-03-18T16:41:20.780 に答える