Yerel HTML5 DB'yi (WebSQL Depolama, SQLite) bir sunucuyla (2 yönlü senkronizasyon) senkronize etmenin en iyi yolu [kapalı]


151

Kullanıcı çevrimdışı olduğunda benim app hala kullanılabilir böylece yerel bir veritabanı (html5 webstorage kullanarak) ile bir mobil web uygulaması (iPhone ve Android için) geliştiriyorum.

Bu mükemmel çalışıyor, ancak yerel verileri bir sunucuya kaydetmek istiyorum. Bu yüzden bir sunucudaki bir DB ile yerel DB senkronize etmek gerekir. Senkronizasyon sadece bir yol olabilir, ancak gelecekte, her iki şekilde de senkronize etmek istiyorum (sunucu <-> yerel DB).

Bu istek çok yaygın görünüyor (veya gelecekte mobil web uygulaması için yaygın olacak), ancak bunu yapan bir kütüphane bulamıyorum.

Google'ın mobil web uygulamasında (ör. Gmail) bunu yaptığını biliyorum ve WSPL projesini bir google projesi olarak buldum, ancak indirmek için kaynak olmadan.

Bir çözüm bulamazsam, bunu yapmak için bir kütüphane oluşturacağım, çünkü tek yönlü senkronizasyon zor görünmüyor, ancak başka çözümler olup olmadığını merak ediyorum.


2
Herhangi bir libs olup olmadığını bilmiyorum, ancak bunu yapmanın en kolay yolu değişiklik zaman damgasını saklamak ve değişiklikleri diğer taraftaki kayıtlardan daha yeni kayıtlara aktarmak ve ayrıca son senkronizasyondan sonra eklemeleri ve silmeleri aktarmak gibi görünüyor. Yerel saatler ve sunucu saatleri eşzamanlı değilse çıldırır, ancak bir şey düşünürsünüz. - Muhtemelen çok yararlı olmadığından ve size bir cevap vermediğinden yorum olarak yayınlamak.
Ivan Vučica

Teşekkürler Ivan. Doğru, yerel ve sunucu saatleri senkronize değilse, dağınık olabilir ... Ben sadece buldum: quickconnect.pbworks.com/Using-Enterprise-Synchronization Yerel bir HTML 5 DB ile bir senkronize edebilir diyor Bir sunucuda DB. Bu konuya daha derinlemesine bakmam ve QuickConnect Çerçevesinin dışında çalışıp çalışmadığını görmem gerekiyor ...
Samuel

Başka bir çözüm buldum: impel.simulacre.org/blog/… Harika görünüyor, ancak Mootools kütüphanesini ve Impel ORM'yi kullanmanız gerekecek ...
Samuel

1
CouchDB hakkında ne dersiniz? couchdb.apache.org
julianm

4
Konular tartışmalar içindir , Stack Exchange sorular içindir . Bir noktada bunun gibi gönderiler Stack Exchange'de kabul edildi, ancak artık kabul edilmedi.
casperOne

Yanıtlar:


70
  • Yerel bir WebSql DB bir sunucu (istemci <-> sunucusu) ile senkronize etmek için WebSqlSync adlı küçük bir JS lib oluşturdum . Kodunuzu kullanmak ve entegre etmek çok kolay:

https://github.com/orbitaloop/WebSqlSync

  • Açık kaynak projesi QuickConnect , yerel HTML5 SQLite DB'sini bir sunucu DB'sine (MySQL veya diğerleri) senkronize etmek için bir JS kütüphanesi içerir:

http://quickconnect.pbworks.com/Using-Enterprise-Synchronization

Bu lib'i kullanmak için, DB'nize erişmek için çerçevenin DataAccessObject öğesini kullanmanız gerekir. DB'ye uygulanan tüm SQL isteklerini depolayarak (elbette seçimi hariç) ve sunucuya göndererek çalışır. Silme işlemini yönetmek harika, ancak çok fazla güncellemeniz varsa ve sunucunun aynı SQL dilini kullanması gerekiyorsa biraz ağır ...

  • QuickConnect'ten başka bir proje yerel bir SQLite senkronizasyonudur (iOS veya Mac OS için Objective C'de ve Android için Java'da):

http://www.quickconnectfamily.org/qcdbsync/ (Sanırım tüm SQL isteklerinin geçmişini de saklıyor)

  • Ve ben sadece başka bir umut verici JS kütüphanesi buldum: persistenceJS

https://github.com/zefhemel/persistencejs

"persistence.js, zaman uyumsuz bir Javascript nesnesiyle ilişkisel eşleyici kitaplığıdır. Tarayıcıda ve sunucuda kullanabilirsiniz (ve bunlar arasında veri modelleri paylaşabilirsiniz)."

Bir DB senkronizasyon modülü var: DOC persistence.synch.js

(istemcide HTML5 DB SQLite veya Google Gears ve sunucudaki MySQL ile çalışır)

  • Ayrıca Impel.inTouch da var . Kullanımı çok kolay görünüyor (php dosyaları dahil), ancak istemci tarafında Mootools çerçevesini kullanmalısınız:

http://impel.simulacre.org/api/Impel.inTouch

  • Sencha ayrıca bir senkronizasyon servisine sahiptir: Sencha.io . Harika görünüyor, ancak Sencha Touch çerçevesine bağlı:

http://www.sencha.com/products/io/


Merhaba Samuel, js lib senin için çalıştı mı?
Mathias Conradt

DB senkronizasyonu şimdilik benim önceliğim değil, bu yüzden vazgeçiyorum, daha standart ve sağlam bir çözüm bekliyorum ...
Samuel

3
Hepsini test ettikten sonra, WebSQL'i bir sunucu DB ile senkronize etmek için kendi küçük JS lib'imi geliştireceğimizi düşünüyorum. Çift senkronizasyon (yerel <-> sunucu) olacak ve herhangi bir bağımlılığı olmayacaktır. Kod bittikten sonra buraya link göndereceğim
Samuel

2
WebSqlSync adlı kendi senkronizasyon çözümümün ilk sürümünü taahhüt ettim: github.com/orbitaloop/WebSqlSync (cevabın altındaki cf)
Samuel

1
Merhaba arkadaşlar, dinlendirici senkronizasyon için bir persistencejs eklentisi başlattım. Hala geliştiriliyor, ancak kimse kontrol etmek istiyorsa: github.com/robertokl/persistencejs ve raylar üzerinde yakut ile sunucu / istemci tarafında çalışan bir örnek: github.com/robertokl/persistencejs-restfulSync-example
robertokl

18

WebSqlSync adlı genel bir senkronizasyon çözümü geliştirdim .

Herhangi bir çerçeveye bağımlı değildir. Buradan erişilebilir: https://github.com/orbitaloop/WebSqlSync

README dosyasının özü:

WebSqlSync

Yerel bir WebSql veritabanını (gezgindeki SQLite) otomatik olarak bir sunucuya senkronize edin. (2 yönlü senkronizasyon: istemci <-> sunucusu)

Mevcut uygulamanıza entegre edilmesi çok kolay ve kullanımı çok kolay (aramak için 2 işlev: initSync ve syncNow)

kullanım

Başlatma

Lib'i başlatmanız gerekir (örneğin her açılışta).

Otomatik olarak 2 tablo oluşturur (önceden yoksa, biri tüm yeni veya değiştirilmiş öğeleri depolamak için (tablo new_elem) ve diğeri son senkronizasyon tarihini depolamak için (tablo sync_info). senkronize etmek istediğiniz tablolarda INSERT veya UPDATE'i izlemek için (değiştirilen öğeleri otomatik olarak new_elem tablosuna eklemek için):

DBSYNC.initSync(TABLES_TO_SYNC, webSqlDb, sync_info, 'http://www.myserver.com', callBackEndInit);

TABLES_TO_SYNC, sunucuyla senkronize etmek istediğiniz tablonun listesidir, örn:

TABLES_TO_SYNC = [
    {tableName : 'table1', idName : 'the_id'},
    {tableName : 'table2'} //if idName not specified, it will assume that it's "id"
];

Senkronize

Senkronizasyonu başlatmak için syncNow işlevini çağırmanız gerekir. Her X saniyede bir veya bazı değişikliklerden sonra arayabilirsiniz:

DBSYNC.syncNow(callBackSyncProgress, function(result) {
     if (result.syncOK === true) {
         //Synchronized successfully
     }
});

Ve müşteri üzerinde yapmanız gereken tek şey bu. Sunucu tarafında, kendi çözümünüzü kodlamanız gerekir (ancak bu karmaşık değildir). PHP ve Java'da bazı örnekler var. Yine, katkıları bekliyoruz.


Bir yıl sonra özetleyerek bunun sizin için ne kadar başarılı olduğunu söylerdiniz? Tarayıcılar ve mobil birimler için çalışan iyi bir istemci tarafı DB arıyorum.
Niklas

1
WebSQLSync, üretimde 25'ten fazla uygulama (iOS ve Android) ile çok iyi çalışıyor. WebSQL gerçekten harika ve hızlı. İOS, Android, Blackberry (sanırım en son sürüm) ve tabii ki krom ve safari üzerinde çalışıyor. Ancak IE ve firefox üzerinde çalışmıyor, çünkü API W3C tarafından amortismana tabi tutuldu ..
Samuel

Tamam, hem pozitif hem de negatifler var. Özet için teşekkürler!
Niklas

2
WebSQL için değil, localStorage için benzer bir şeyiniz var mı?
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.