सर्वर के साथ स्थानीय HTML5 DB (WebSQL संग्रहण, SQLite) को सिंक्रनाइज़ करने का सबसे अच्छा तरीका (2 तरह सिंक) [बंद]


151

मैं एक स्थानीय डेटाबेस (html5 वेबस्टोर का उपयोग करके) के साथ एक मोबाइल वेब एप्लिकेशन (iPhone और Android के लिए) विकसित कर रहा हूं, इसलिए उपयोगकर्ता के ऑफ़लाइन होने पर मेरा ऐप अभी भी उपयोग करने योग्य है।

यह पूरी तरह से काम कर रहा है, लेकिन मैं एक सर्वर पर स्थानीय डेटा को सहेजना चाहता हूं। इसलिए मुझे एक सर्वर पर DB के साथ स्थानीय DB को सिंक्रनाइज़ करने की आवश्यकता है। सिंक्रनाइज़ेशन केवल एक ही तरीका हो सकता है, लेकिन भविष्य में, मैं इसे दोनों तरह से सिंक्रनाइज़ करना चाहूंगा (सर्वर <-> अतिरिक्त डीबी)।

यह आवश्यकता बहुत आम लगती है (या मोबाइल वेब ऐप के लिए भविष्य में आम होगी), लेकिन मुझे ऐसा करने में कोई लाइब्रेरी नहीं मिल रही है।

मुझे पता है कि Google अपने मोबाइल वेब ऐप (उदा। जीमेल) में कर रहा है, और मुझे डब्ल्यूएसपीएल परियोजना एक Google परियोजना मिली लेकिन डाउनलोड करने के लिए स्रोत के बिना।

अगर मुझे कोई समाधान नहीं मिल रहा है, तो मैं ऐसा करने के लिए एक पुस्तकालय बनाऊंगा, क्योंकि एक तरह से सिंक मुश्किल नहीं दिखता है, लेकिन मुझे आश्चर्य है कि अगर कोई अन्य समाधान है।


2
मुझे नहीं पता कि क्या कोई लिबास हैं, लेकिन ऐसा करने का सबसे आसान तरीका संशोधन टाइमस्टैम्प को संग्रहीत करना है, और उन परिवर्तनों को रिकॉर्ड में स्थानांतरित करना है जो दूसरी तरफ के रिकॉर्ड से नए हैं, और पिछले सिंक के बाद से परिवर्धन और विलोपन भी स्थानांतरित कर रहे हैं। अगर लोकल और सर्वर क्लॉक सिंक में नहीं हैं, तो यह पागल हो सकता है, लेकिन आप कुछ सोचेंगे। - टिप्पणी के रूप में पोस्ट करना क्योंकि यह संभवतः बहुत उपयोगी नहीं है और आपको उत्तर नहीं प्रदान करता है।
इवान वूइका

धन्यवाद इवान। आप सही हैं, यदि स्थानीय और सर्वर घड़ियां सिंक में नहीं हैं, तो यह गड़बड़ हो सकती है ... मैंने अभी पाया कि: quickconnect.pbworks.com/Using-Enterprise-Synchronization यह कहता है कि यह एक स्थानीय एचटीएमएल 8 डीबी के साथ सिंक्रनाइज़ कर सकता है। एक सर्वर में डी.बी. मुझे उस पर एक गहरी नज़र रखने की ज़रूरत है, और देखें कि क्या यह क्विककनेक्ट फ्रेमवर्क के बाहर चल सकता है ...
सैमुअल

मुझे एक और उपाय मिला: impel.simulacre.org/blog/… बहुत अच्छा लग रहा है, लेकिन आपको मूट्स लाइब्रेरी, और इम्पेल ओआरएम ...
सैमुअल

1
CouchDB के बारे में कैसे? couchdb.apache.org
julianm

4
विषय चर्चा के लिए हैं , स्टैक एक्सचेंज प्रश्नों के लिए है । एक बिंदु पर इस तरह के पदों को स्टैक एक्सचेंज में स्वीकार किया गया था, लेकिन अब नहीं।
कैस्पर ओने

जवाबों:


70
  • मैंने WebSqlSync नाम की एक छोटी सी जेएस लायबिलिटी बनाई है जो एक सर्वर (क्लाइंट <- सर्वर) के साथ एक स्थानीय वेबसेल डीबी को सिंक्रनाइज़ करने के लिए है। अपने कोड में उपयोग करना और एकीकृत करना बहुत आसान है:

https://github.com/orbitaloop/WebSqlSync

  • ओपन सोर्स प्रोजेक्ट क्विककनेक्ट में स्थानीय HTML5 SQLite DB को एक सर्वर DB (MySQL) या अन्य के साथ सिंक्रनाइज़ करने के लिए JS लाइब्रेरी है:

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

इस lib का उपयोग करने के लिए, आपको अपने DB तक पहुँचने के लिए चौखटे के DataAccessObject का उपयोग करने की आवश्यकता है। यह DB के लिए लागू सभी SQL अनुरोध (कोर्स का चयन को छोड़कर) को संग्रहीत करके, और उन्हें सर्वर पर भेजकर काम करता है। हटाने को प्रबंधित करना बहुत अच्छा है, लेकिन यदि आपके पास बहुत सारे अपडेट हैं, तो यह थोड़ा भारी है, और सर्वर को उसी SQL भाषा का उपयोग करने की आवश्यकता है ...

  • QuickConnect का एक अन्य प्रोजेक्ट एक देशी SQLite synch है (IOS या Mac OS के लिए Object C में और Android के लिए जावा में):

http://www.quickconnectfamily.org/qcdbsync/ (मुझे लगता है कि यह सभी SQL अनुरोधों का इतिहास भी संग्रहीत करता है)

  • और मुझे बस एक और आशाजनक जेएस लाइब्रेरी मिली: दृढ़ता

https://github.com/zefhemel/persistencejs

"persistence.js एक अतुल्यकालिक जावास्क्रिप्ट ऑब्जेक्ट-रिलेशनल मैपर लाइब्रेरी है। आप इसे ब्राउज़र में उपयोग कर सकते हैं, साथ ही सर्वर पर भी (और आप उनके बीच डेटा मॉडल साझा कर सकते हैं)।"

उनके पास एक डीबी सिंक्रोमीटर मॉड्यूल है: डीओसी की दृढ़ता। एसएनईएनएच.जेएस

(क्लाइंट पर HTML5 DB SQLite या Google गियर्स और सर्वर पर MySQL के साथ काम करता है)

  • और इसमें Impel.inTouch भी है । इसका उपयोग करना बहुत आसान है (php फ़ाइलों के साथ), लेकिन आपको क्लाइंट पक्ष में Mootools ढांचे का उपयोग करना चाहिए:

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

  • Sencha में एक सिंक्रनाइज़ेशन सेवा भी है: Sencha.io । बहुत अच्छा लग रहा है, लेकिन यह स्नेहा टच फ्रेमवर्क पर निर्भर है:

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


सैम सैमुअल, क्या जेएस ने आपके लिए काम किया है?
मैथियास कॉनराड

DB सिंक अभी के लिए मेरी प्राथमिकता नहीं है, इसलिए मैं बस छोड़ देता हूं, एक अधिक मानक और मजबूत समाधान की प्रतीक्षा कर रहा हूं ...
शमूएल

3
उन सभी का परीक्षण करने के बाद, मुझे लगता है कि मैं एक वेब डीबी के साथ वेबएसक्यू को सिंक्रनाइज़ करने के लिए अपने स्वयं के छोटे जेएस को विकसित करेगा। यह एक डबल सिंक्र (स्थानीय <-> सर्वर) होगा और इसमें कोई निर्भरता नहीं होगी। मैं एक बार समाप्त होने पर कोड का लिंक यहाँ पोस्ट करूंगा
सैम्युअल

2
मैंने WebSqlSync नाम के अपने स्वयं के सिंक समाधान का पहला संस्करण शुरू किया है: github.com/orbitaloop/WebSqlSync (उत्तर के नीचे cf)
सैमुअल

1
हाय दोस्तों, मैंने शिथिलीकरण सिंक्रनाइज़ेशन के लिए एक persistencejs प्लगइन शुरू किया है। यह अभी भी विकास में है, लेकिन किसी को भी यह बाहर की जाँच करना चाहता है: github.com/robertokl/persistencejs और एक काम कर रेल पर रूबी के साथ सर्वर / क्लाइंट की तरफ उदाहरण: github.com/robertokl/persistencejs-restfulSync-example
robertokl

18

मैंने WebSqlSync नामक एक जेनेरिक सिंक समाधान विकसित किया है ।

यह किसी भी ढांचे पर निर्भर नहीं है। यह यहां उपलब्ध है: https://github.com/orbitaloop/WebSqlSync

README फाइल का उद्धरण:

WebSqlSync

स्वचालित रूप से एक स्थानीय WebSql डेटाबेस (नाविक में SQLite) को एक सर्वर से सिंक्रनाइज़ करें। (2 तरीका सिंक: क्लाइंट <-> सर्वर)

अपने मौजूदा ऐप को एकीकृत करना बहुत आसान है और उपयोग करने के लिए बहुत आसान है (कॉल करने के लिए 2 फ़ंक्शन: initSync और SyncNow)

प्रयोग

प्रारंभ

आपको लिबर को इनिशियलाइज़ करने की आवश्यकता है (उदाहरण के लिए प्रत्येक स्टार्टअप पर)।

यह स्वचालित रूप से 2 तालिकाओं का निर्माण करेगा (यदि वे पहले से मौजूद नहीं हैं, तो सभी नए या संशोधित तत्वों (तालिका new_elem) को संग्रहीत करने के लिए और अंतिम सिंक (तालिका सिंक_इनफो) की तारीख को संग्रहीत करने के लिए। यह SQLite ट्रिगर भी बनाएगा। उन तालिकाओं पर INSERT या अद्यतन देखने के लिए जिसे आप सिंक्रनाइज़ करना चाहते हैं (new_elem तालिका में संशोधित तत्वों को स्वचालित रूप से सम्मिलित करने के लिए):

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

जहां TABLES_TO_SYNC उस तालिका की सूची है, जिसे आप सर्वर के साथ सिंक करना चाहते हैं, पूर्व:

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

सिंक्रनाइज़

सिंक्रोनाइज़ेशन शुरू करने के लिए, आपको सिंकऑन फ़ंक्शन को कॉल करना होगा। आप इसे हर X सेकंड या उदाहरण के लिए कुछ परिवर्तनों के बाद कह सकते हैं:

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

और यही सब आपको क्लाइंट पर करना होगा। सर्वर की ओर, आपको अपने स्वयं के समाधान को कोड करने की आवश्यकता होगी (लेकिन यह जटिल नहीं है)। और inPHP और जावा में कुछ उदाहरण हैं। फिर से, योगदान का स्वागत है।


एक साल बाद इसे संक्षेप में बताते हुए आपने कितना अच्छा काम किया होगा? मैं एक अच्छे क्लाइंट-साइड DB की तलाश कर रहा हूं जो ब्राउज़रों और मोबाइल इकाइयों के लिए काम करता है।
निकलैस

1
WebSQLSync उत्पादन (iOS और Android) में 25 से अधिक ऐप्स के साथ बहुत अच्छा काम कर रहा है। WebSQL वास्तव में महान और तेज है। यह आईओएस, एंड्रॉइड, ब्लैकबेरी (नवीनतम संस्करण जो मुझे लगता है) और निश्चित रूप से क्रोम और सफारी पर काम कर रहा है। लेकिन यह IE और फ़ायरफ़ॉक्स पर काम नहीं कर रहा है, क्योंकि डब्ल्यू 3 सी द्वारा एपीआई को हतोत्साहित किया गया है ..
सैमुअल

ठीक है, वहाँ सकारात्मक और नकारात्मक दोनों। पुनरावृत्ति के लिए धन्यवाद!
निकोलस

2
क्या आपके पास ऐसा ही कुछ है, लेकिन लोकलस्टोरेज के लिए और WebSQL के लिए नहीं?
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.