Database ieu hurung ...

Database ieu hurung ...

Hayu atuh ngabejaan carita teknis.

Sababaraha taun ka pengker, abdi nuju ngembangkeun hiji aplikasi kalawan fitur kolaborasi diwangun kana eta. Éta tumpukan ékspérimén anu ramah-pamaké anu ngamangpaatkeun poténsial pinuh ku réaksi awal sareng CouchDB. Éta nyingkronkeun data sacara real waktos via JSON OT. Éta dianggo sacara internal dina perusahaan, tapi katerapan sareng poténsi anu lega di daérah sanés jelas.

Nalika nyobian ngajual téknologi ieu ka klien poténsial, kami mendakan halangan anu teu kaduga. Dina pidéo demo, téknologi urang katingali sareng damel saé, teu aya masalah. Video nunjukkeun persis kumaha éta jalanna sareng henteu niru nanaon. Urang datang nepi ka jeung disandi skenario realistis pikeun ngagunakeun program.

Database ieu hurung ...
Kanyataanna, ieu janten masalah. demo kami digawé persis cara dulur sejenna simulated aplikasi maranéhanana. Husus, inpormasi langsung ditransfer ti A ka B, sanaos file média anu ageung. Saatos log in, unggal pangguna ningali éntri énggal. Ngagunakeun aplikasi, pamaké béda bisa gawé bareng jelas dina proyék nu sami, sanajan sambungan Internet ieu interrupted wae di kampung. Ieu sacara implisit tersirat dina sagala potongan video produk dina After Effects.

Sanaos sadayana terang pikeun naon tombol Refresh, teu aya anu leres-leres ngartos yén aplikasi wéb anu dipénta urang ngawangun biasana tunduk kana watesan sorangan. Sareng upami aranjeunna henteu diperyogikeun deui, pangalaman pangguna bakal béda-béda. Aranjeunna lolobana noticed nu maranéhna bisa "ngobrol" ku ninggalkeun catetan pikeun jalma aranjeunna diajak ngobrol, ngarah wondered kumaha ieu béda ti, contona, Slack. Péh!

Desain syncs sapopoé

Upami anjeun gaduh pangalaman dina pamekaran parangkat lunak, éta kedah émut yén kalolobaan jalma henteu ngan ukur ningali gambar antarmuka sareng ngartos naon anu bakal dilakukeun nalika berinteraksi sareng éta. Teu nyebut naon kajadian di jero program sorangan. Pangaweruh éta bisa Kajadian sabagéan ageung hasil tina terang naon anu henteu tiasa kajantenan sareng anu henteu kedah kajantenan. Ieu merlukeun modél mental henteu ngan ukur naon anu dilakukeun ku parangkat lunak, tapi ogé kumaha bagian-bagianna dikoordinasikeun sareng saling komunikasi.

Hiji conto klasik ieu pamaké staring di a spinner.gif, wondering nalika karya tungtungna bakal réngsé. Pamekar bakal sadar yén prosésna sigana macét sareng yén gif moal pernah ngaleungit tina layar. animasi ieu simulates palaksanaan pakasaban, tapi teu patali jeung kaayaan na. Dina kasus kawas, sababaraha techies resep gulung panon maranéhanana, amazed di extent kabingungan pamaké. Sanajan kitu, perhatikeun sabaraha di antarana nunjuk ka jam puteran sarta nyebutkeun yén éta téh sabenerna cicing?

Database ieu hurung ...
Ieu hakekat nilai real-time. Dinten ieu, database real-time masih saeutik pisan dipaké sarta loba jalma nempo eta kalawan curiga. Seuseueurna pangkalan data ieu condong pisan kana gaya NoSQL, naha éta biasana ngagunakeun solusi basis Mongo, anu paling hilap. Najan kitu, keur kuring ieu hartina meunang nyaman gawé bareng CouchDB, kitu ogé diajar mendesain struktur nu leuwih ti ngan sababaraha birokrat bisa ngeusian ku data. Panginten kuring nganggo waktos langkung saé.

Tapi topik anu leres tina tulisan ieu nyaéta anu kuring anggo ayeuna. Henteu ku pilihan, tapi kusabab acuh na ambing nerapkeun kawijakan perusahaan. Janten kuring bakal nyayogikeun perbandingan anu lengkep sareng adil tina dua produk database real-time Google anu raket.

Database ieu hurung ...
Duanana mibanda kecap Seuneu dina ngaran maranéhanana. Hiji hal kuring inget fondly. Anu kadua pikeun kuring nyaéta jinis seuneu anu béda. Abdi henteu buru-buru nyebatkeun namina, sabab sakali kuring ngalakukeun, urang bakal ngalaman masalah gedé anu munggaran: nami.

Anu kahiji disebutna Firebase Real-Time Database, sareng kadua - Firebase Cloud Firestore. Duanana mangrupakeun produk ti Firebase suite Google. API maranéhanana disebut mungguh firebase.database(…) и firebase.firestore(…).

Ieu lumangsung alatan Database Real-Time - éta ngan aslina Firebase saméméh dibeuli ku Google dina 2014. Lajeng Google mutuskeun pikeun nyieun salaku produk paralel nyalin Firebase dumasar kana parusahaan data badag, sarta disebutna Firestore kalawan awan a. Muga-muga anjeun teu lieur acan. Upami anjeun masih bingung, tong hariwang, kuring sorangan nyerat deui bagian tina tulisan ieu sapuluh kali.

Kusabab anjeun kedah nunjukkeun Firebase dina sual Firebase, jeung Firestore dina patarosan ngeunaan Firebase, sahenteuna sangkan anjeun ngartos sababaraha taun ka pengker on tumpukan mudal.

Upami aya panghargaan pikeun pangalaman pangaranan parangkat lunak anu paling awon, ieu pasti janten salah sahiji pesaing. Jarak Hamming antara ngaran ieu jadi leutik nu confuses malah insinyur ngalaman nu ramo ngetik hiji ngaran bari huluna maranéhna keur mikir ngeunaan sejen. Ieu rencana well-intentioned nu gagal miserably; aranjeunna minuhan nubuat yén database bakal on seuneu. Sareng kuring henteu ngabodor pisan. Jalma anu datang nepi ka skéma ngaran ieu ngabalukarkeun getih, kesang jeung cimata.

Database ieu hurung ...

meunangna Pyrrhic

Hiji bakal mikir yén Firestore téh ngagantian Firebase, turunan generasi saterusna, tapi éta bakal nyasabkeun. Firestore henteu dijamin janten gaganti anu cocog pikeun Firebase. Sigana mah batur motong kaluar sagalana metot ti dinya, sarta bingung lolobana sésana dina sagala rupa cara.

Sanajan kitu, hiji glance gancang dina dua produk bisa ngalieurkeun anjeun: aranjeunna sigana lakonan hal nu sarua, ngaliwatan dasarna API sarua komo dina sési database sarua. Bedana anu halus tur kaungkap ngan ku studi banding taliti tina dokuméntasi éksténsif. Atanapi nalika anjeun nyobian port kode anu tiasa dianggo sampurna dina Firebase supados tiasa dianggo sareng Firestore. Malah teras anjeun terang yén antarmuka database hurung pas anjeun nyobian nyéred sareng teundeun beurit sacara real waktos. Kuring ngulang, kuring henteu ngabodor.

Klién Firebase téh sopan dina harti yén éta buffers parobahan sarta otomatis retries apdet anu masihan prioritas kana operasi nulis panungtungan. Sanajan kitu, Firestore boga wates 1 operasi nulis per dokumen per pamaké per detik, sarta wates ieu enforced ku server. Nalika damel sareng éta, terserah anjeun pikeun milari jalanna sareng nerapkeun pembatas tingkat pembaruan, sanaos anjeun badé ngawangun aplikasi anjeun. Hartina, Firestore nyaéta database real-time tanpa klien real-time, nu masquerades salaku hiji maké API.

Di dieu urang mimiti ningali tanda-tanda mimiti raison d'être Firestore. Abdi tiasa salah, tapi kuring curiga yén aya jalma anu luhur dina manajemén Google ningali Firebase saatos ngagaleuh sareng ngan ukur nyarios, "Henteu, ya Allah, henteu. Ieu teu bisa ditarima. Ngan henteu dina kapamimpinan kuring."

Database ieu hurung ...
Anjeunna muncul ti kamar na nyatakeun:

"Hiji dokumén JSON badag? No. Anjeun bakal ngabagi data kana dokumén anu misah, anu masing-masing ukuranana henteu langkung ti 1 megabyte.

Sigana yén watesan sapertos kitu moal salamet dina patepungan munggaran kalayan dasar pangguna anu cukup ngamotivasi. Anjeun terang éta. Di tempat kerja, contona, urang gaduh langkung ti hiji satengah sarébu presentasi, sareng ieu Lengkep Normal.

Kalayan watesan ieu, anjeun bakal kapaksa nampi kanyataan yén hiji "dokumen" dina pangkalan data moal nyarupaan objék naon waé anu tiasa disebat ku pangguna.

"Arrays of arrays nu recursively bisa ngandung elemen séjén? No. Array ngan ukur ngandung objék atanapi nomer anu panjangna tetep, sakumaha anu dipikahoyong ku Gusti."

Janten upami anjeun ngarepkeun nempatkeun GeoJSON kana Firestore anjeun, anjeun bakal mendakan yén ieu teu mungkin. Euweuh non-hiji diménsi anu bisa ditarima. Abdi ngarepkeun anjeun resep Base64 sareng / atanapi JSON dina JSON.

"Impor sareng ékspor JSON via HTTP, alat garis paréntah atanapi panel admin? No. Anjeun ngan ukur tiasa ngékspor sareng ngimpor data ka Google Cloud Storage. Kitu nu disebut ayeuna mah. Sareng nalika kuring nyarios "anjeun," kuring ngan ukur nyarios ka jalma anu gaduh kredensial Pamilik Proyék. Sadayana tiasa angkat sareng ngadamel tikét."

Sakumaha anjeun tiasa tingali, model data FireBase gampang dijelaskeun. Ieu ngandung hiji dokumen JSON badag nu associates konci JSON kalawan jalur URL. Lamun nulis kalawan HTTP PUT в / FireBase nyaéta kieu:

{
  "hello": "world"
}

éta GET /hello bakal mulang "world". Dasarna tiasa dianggo persis sapertos anu anjeun ngarepkeun. Kumpulan objék FireBase /my-collection/:id sarua jeung kamus JSON {"my-collection": {...}} dina akar, eusina aya dina /my-collection:

{
  "id1": {...object},
  "id2": {...object},
  "id3": {...object},
  // ...
}

Ieu jalan rupa lamun unggal sisipan boga ID tabrakan-gratis, nu sistem boga solusi baku pikeun.

Kalayan kecap sanésna, pangkalan data 100% JSON (*) cocog sareng tiasa dianggo sareng HTTP, sapertos CouchDB. Tapi dasarna anjeun ngagunakeun éta ngaliwatan API real-time nu abstracts websockets, otorisasina, sarta langganan. Panel admin boga duanana kamampuhan, sahingga duanana ngedit real-time jeung JSON impor / ékspor. Upami anjeun ngalakukeun hal anu sami dina kode anjeun, anjeun bakal kaget sabaraha kode khusus anu bakal dibuang nalika anjeun sadar yén patch sareng diff JSON ngabéréskeun 90% tina tugas rutin pikeun nanganan kaayaan pengkuh.

Model data Firestore sami sareng JSON, tapi béda dina sababaraha cara kritis. Kuring geus disebutkeun kurangna arrays dina arrays. Model pikeun sub-koleksi pikeun aranjeunna janten konsep kelas munggaran, misah ti dokumén JSON anu ngandung aranjeunna. Kusabab teu aya serialization siap-dijieun pikeun ieu, jalur kode husus diperlukeun pikeun meunangkeun jeung nulis data. Pikeun ngolah koleksi anjeun nyalira, anjeun kedah nyerat skrip sareng alat anjeun nyalira. Panel admin ngan ngidinan Anjeun pikeun nyieun parobahan leutik hiji widang dina hiji waktu, sarta teu mibanda kamampuhan impor / ékspor.

Aranjeunna nyandak database NoSQL sacara real-time sareng janten non-SQL anu laun kalayan gabung otomatis sareng kolom non-JSON anu misah. Sapertos GraftQL.

Database ieu hurung ...

Panas Jawa

Upami Firestore sakuduna langkung dipercaya sareng scalable, maka ironina nyaéta pamekar rata-rata bakal ngeureunkeun solusi anu kurang dipercaya tibatan milih FireBase out of the box. Jenis parangkat lunak anu dibutuhkeun ku Administrator Database Grumpy butuh tingkat usaha sareng kaliber bakat anu ngan saukur teu realistis pikeun niche produk anu sakuduna dituju. Ieu sami sareng kumaha HTML5 Canvas sanés ngagentos Flash upami teu aya alat pangembangan sareng pamuter. Leuwih ti éta, Firestore geus mired dina kahayang pikeun purity data jeung validasi steril nu saukur teu align jeung kumaha pamaké bisnis rata. resep gawe: pikeun anjeunna sagalana geus pilihan, sabab nepi ka ahir sagalana mangrupa draf.

The disadvantage utama FireBase nyaeta klien nu dijieun sababaraha taun payun waktu na, saméméh paling pamekar web terang ngeunaan immutability. Kusabab ieu, FireBase nganggap yén anjeun bakal ngarobih data sareng ku kituna henteu ngamangpaatkeun immutability anu disayogikeun ku pangguna. Salaku tambahan, éta henteu nganggo deui data dina jepretan anu dikirimkeun ka pangguna, anu ngajantenkeun bédana langkung sesah. Pikeun dokumén anu ageung, mékanisme transaksi dumasar-béda anu mutable na ngan saukur teu cekap. Guys, urang geus boga WeakMap dina JavaScript. Nyaan.

Upami anjeun masihan data bentuk anu dipikahoyong sareng henteu ngajantenkeun tangkalna ageung teuing, maka masalah ieu tiasa dihindari. Tapi kuring panasaran lamun FireBase bakal jadi leuwih metot lamun pamekar ngarilis API klien bener alus nu dipaké immutability digabungkeun jeung sababaraha saran praktis serius dina desain database. Sabalikna, aranjeunna sigana nyobian ngalereskeun naon anu henteu rusak, sareng éta langkung parah.

Kuring henteu weruh sagala logika balik kreasi Firestore. Spekulasi ngeunaan motif anu timbul di jero kotak hideung ogé bagian tina kasenangan. Ieu juxtaposition dua database pisan sarupa tapi incomparable ieu rada langka. Ieu kawas batur mikir: "Firebase ngan ukur fungsi anu tiasa urang tiru dina Google Cloud", tapi henteu acan mendakan konsép ngidentipikasi syarat dunya nyata atanapi nyiptakeun solusi anu mangpaat anu nyumponan sadaya sarat éta. "Hayu para pamekar mikir ngeunaan éta. Ngan nyieun UI geulis ... Dupi anjeun tiasa nambihan deui seuneu?"

Kuring ngarti sababaraha hal ngeunaan struktur data. Kuring pasti ningali "sagalana dina hiji tangkal JSON badag" konsép salaku usaha abstrak sagala rasa struktur skala badag tina database. Ngaharepkeun parangkat lunak pikeun ngatasi fraktal struktur data anu curiga ngan saukur gélo. Kuring malah teu kudu ngabayangkeun kumaha goréng bisa jadi, Kuring geus dipigawé audits kode rigorous na Kuring ningali hal-hal anu teu pernah diimpikeun ku anjeun. Tapi kuring ogé terang kumaha struktur anu saé, kumaha ngagunakeun aranjeunna и naha ieu kudu dipigawé. Abdi tiasa ngabayangkeun dunya dimana Firestore sigana logis sareng jalma anu nyiptakeunana bakal mikir yén aranjeunna ngalakukeun padamelan anu saé. Tapi urang teu hirup di dunya ieu.

Pangrojong pamundut FireBase kirang ku standar naon waé sareng praktis henteu aya. Éta pasti peryogi perbaikan atanapi sahenteuna révisi. Tapi Firestore henteu langkung saé sabab dugi ka indéks hiji diménsi anu sami anu aya dina SQL biasa. Upami anjeun peryogi patarosan anu dijalankeun ku jalma dina data kacau, anjeun peryogi milarian téks lengkep, saringan multi-rentang, sareng pesenan anu ditetepkeun ku pangguna. Kana pamariksaan anu langkung caket, pungsi SQL polos teuing dugi ka nyalira. Sajaba ti, hijina queries SQL jalma bisa ngajalankeun dina produksi queries gancang. Anjeun peryogi solusi indéks khusus sareng struktur data anu pinter. Pikeun sagalana sejenna, sahenteuna kudu aya incremental peta-ngurangan atawa hal sarupa.

Upami anjeun milarian Google Docs kanggo inpormasi ngeunaan ieu, mudah-mudahan anjeun bakal ditunjukkeun ka arah anu sapertos BigTable sareng BigQuery. Nanging, sadaya solusi ieu dibarengan ku jargon penjualan perusahaan anu seueur pisan anu anjeun bakal gancang balikkeun sareng ngamimitian milarian anu sanés.

Hal anu terakhir anu anjeun pikahoyong ku database real-time mangrupikeun hal anu dilakukeun ku sareng pikeun jalma dina skala bayar manajemén.

(*) Ieu bobodoran, teu aya anu sapertos kitu 100% JSON cocog.

salaku iklan

Milarian VDS pikeun proyék debugging, server pikeun ngembangkeun sarta hosting? Anjeun pasti klien kami 🙂 Harga poean pikeun server rupa-rupa konfigurasi, lisensi anti DDoS sareng Windows parantos kalebet dina harga.

Database ieu hurung ...

sumber: www.habr.com

Tambahkeun komentar