Theory
Cloudમાં data save કરવું
હવે તમે DatabaseReferenceને કોઈ path પર point કરી શકો છો, એટલે ત્યાં data write કરી શકો છો. FestConnectમાં student event માટે register કરે ત્યારે registration Realtime Databaseમાં save થવી જોઈએ, જેથી તે persist થાય અને devices વચ્ચે sync થાય.
Writing માટે મુખ્ય method setValue છે અને listમાં items add કરવા માટે મહત્વનું helper push છે. આ lesson બંને સમજાવે છે અને તેમનો મહત્વનો difference બતાવે છે. push અને setValueનો સાચો ઉપયોગ કરવાથી common data-loss bugથી બચી શકાય છે.
Theory
setValue path પર લખે છે
setValue(data) referenceના path પર value લખે છે અને ત્યાં પહેલેથી રહેલું data replace કરે છે. તમે primitive, map અથવા simple Kotlin data-class object write કરી શકો છો.
ઉદાહરણ તરીકે, database.getReference("settings").child("theme").setValue("dark") settings/theme પર 'dark' store કરે છે. Single, known location, જેમ કે એક setting અથવા profile field, માટે આ યોગ્ય છે. પરંતુ ધ્યાન રાખો: setValue overwrite કરે છે. એ જ fixed path પર બીજી વાર write કરશો તો પહેલું value replace થશે. Single item માટે આ યોગ્ય છે, પરંતુ listમાં entries add કરવા માટે ખોટું છે. List માટે push વાપરો.
Practical
Single value write કરવું અને pushથી listમાં item add કરવો
val db = FirebaseDatabase.getInstance()
// Single, known location: setValue overwrites
db.getReference("settings").child("theme").setValue("dark")
// A list: push() makes a UNIQUE key per item, so entries never collide
val eventsRef = db.getReference("events")
val event = mapOf("name" to "Robotics", "seats" to 50)
eventsRef.push().setValue(event) // events/<auto-id>/...
eventsRef.push().setValue(mapOf("name" to "Coding")) // a different auto-idFormula
List માટે push, single item માટે setValue
આ write rule યાદ રાખો. જ્યાં exactly એક વસ્તુ હોય અને path fixed હોય ત્યાં setValue વાપરો, જેમ કે setting અથવા known keyવાળો record. Collectionમાં નવા items add કરવા push() વાપરો. તે દરેક item માટે unique auto-id child key બનાવે છે, તેથી દરેક event અથવા registrationને પોતાનું સ્થાન મળે છે અને overwrite થતું નથી.
જો listના same path પર વારંવાર setValue call કરશો, તો દરેક write પહેલાંનું value replace કરશે અને છેલ્લી entry સિવાયનું data silently ગુમાઈ શકે છે. push() listને safely grow થવા દે છે. Doubt હોય તો: collectionમાં add કરો છો તો push.
Quiz
Realtime Databaseમાં 'registrations' listમાં ઘણી registrations add કરતી વખતે `ref.setValue(...)`ને બદલે `ref.push().setValue(...)` શા માટે વાપરશો?
- push એ setValue લખવાની માત્ર ટૂંકી રીત છે
- push() દરેક item માટે unique key બનાવે છે, તેથી registrations overwrite થતી નથી; same path પર setValue previous value replace કરે છે
- setValue Realtime Database સાથે કામ કરતું નથી
- push data encrypt કરે છે
Show the answer
push() દરેક item માટે unique key બનાવે છે, તેથી registrations overwrite થતી નથી; same path પર setValue previous value replace કરે છે
push() દરેક નવા child માટે unique auto-generated key બનાવે છે. તેથી દરેક registrationનું પોતાનું સ્થાન હોય છે અને list વધતી રહે છે. Same fixed path પર વારંવાર setValue કરશો તો દરેક વખત previous value OVERWRITE થશે અને માત્ર છેલ્લી registration રહેશે, અને એ data-loss નો bug છે. Option A ખોટું છે: push માત્ર shorthand નથી; તે unique key બનાવીને behaviour બદલે છે. Option C ખોટું છે: setValue Realtime Databaseમાં બરાબર કામ કરે છે અને single known location માટે યોગ્ય છે. Option D invented છે: push encryption કરતું નથી. Collection માટે push અને single known location માટે setValue વાપરો.
Think first
Central counter વગર push() unique keys કેવી રીતે બનાવે છે?
ઘણા devices એક જ સમયે push કરી શકે છે. Central ID server વગર push() બે itemsને same key ન મળે તે કેવી રીતે કરે છે? પછી tap.
Show the answer
push() એવી keys બનાવે છે જે TIME-ORDERED અને RANDOM બંને હોય છે. તેથી અનેક clients એકસાથે push કરે ત્યારે પણ central counter સાથે coordinate કર્યા વગર અલગ keys મળે છે.
જો દરેક clientએ serverને 'next number આપો' કહેવું પડે, તો server bottleneck બની જાય અને offline અથવા heavy concurrencyમાં મુશ્કેલી પડે. Firebase push keyમાં timestamp અને random bits હોય છે. Timestamp portion keysને items add થયેલા orderમાં sort થવામાં મદદ કરે છે. Random portion એ જ millisecondમાં, અલગ devices પરથી બનેલી keys પણ અલગ રહેવાની શક્યતા ખૂબ વધારે બનાવે છે; collisionની probability અત્યંત ઓછી હોય છે.
મહત્વનું એ છે કે client valid unique key પોતે locally અને તરત generate કરી શકે છે, offline હોવા છતાં, server round trip વગર. Real-time અને offline-capable multi-device database માટે આ ખૂબ ઉપયોગી છે. એટલે push growing shared lists માટે યોગ્ય છે: locally generated time plus randomness, central coordinator વગર unique keys આપે છે.
Summary
Key takeaways
- Realtime Databaseમાં write કરવા referenceને path પર point કરીને setValue call કરો.
- setValue(data) path પર value લખે છે અને ત્યાં રહેલું data replace કરે છે; single known location માટે વાપરો.
- Lists અને collections માટે push() વાપરીને unique auto-id child key બનાવો અને પછી setValue કરો.
- push() entriesને overwrite થવાથી બચાવે છે; fixed path પર setValue previous value replace કરે છે.
- Rule: collectionમાં add કરવા push, single known item માટે setValue.
- Writes asynchronous છે અને Task return કરે છે (જરૂર હોય તો completion listener handle કરો); primitives, maps અને simple data-class objects write કરી શકાય છે.
- Memory hook: setValue path પર write/overwrite કરે છે; push દરેક નવા list item માટે unique key બનાવે છે.