Atlas Device SDK utiliza un motor de almacenamiento altamente eficiente para la persistencia de objetos. Puede crear, actualizar y, eventualmente,eliminar objetos de la base de datos. Dado que estas operaciones modifican el estado de la base de datos, se denominan escrituras.
Transacciones de escritura
El SDK gestiona las escrituras en términos de transacciones. Una transacción es una lista de operaciones de lectura y escritura que el SDK trata como una única operación indivisible. En otras palabras, una transacción es un proceso de todo o nada: o todas las operaciones de la transacción se realizan correctamente o ninguna de ellas tiene efecto.
Todas las escrituras deben realizarse en una transacción.
La base de datos solo permite una transacción abierta a la vez. El SDK bloquea otras escrituras en otros subprocesos hasta que se complete la transacción abierta. Por lo tanto, no existe una condición de carrera al leer valores de la base de datos dentro de una transacción.
Cuando haya terminado su transacción, el SDK la confirmará o la cancelará:
Cuando el SDK confirma una transacción, escribe todos los cambios en el disco. En el caso de las bases de datos sincronizadas, el SDK pone el cambio en cola para su sincronización con Atlas Device Sync.
Cuando el SDK cancela una transacción de escritura o una operación en la transacción provoca un error, todos los cambios se descartan (o se "revierten").
Operaciones de escritura
Una vez que haya abierto una base de datos, puede crear objetos dentro de ella utilizando un Reino.write() bloque de transacción.
realm.write((){ // ...write data to realm });
También puede devolver valores desde la función de devolución de llamada de transacción de escritura.
final yoda = realm.write<Person>(() { return realm.add(Person(ObjectId(), 'Yoda')); });
Advertencia
Escribir objetos de reino en un archivo de reino
Solo puedes escribir RealmObjects A un solo archivo de dominio. Si ya escribió un RealmObject en un archivo de dominio, el SDK lanza un RealmException si intenta escribirlo en otra base de datos.
Guardados en segundo plano
Puede agregar, modificar o eliminar objetos de forma asincrónica utilizando Realm.writeAsync().
Al usar Realm.writeAsync() para realizar operaciones de escritura, la espera para obtener el bloqueo de escritura y la confirmación de una transacción ocurren en segundo plano. Solo la escritura se realiza en el proceso principal.
Esto puede reducir el tiempo empleado en bloquear la ejecución del proceso principal. Esto es especialmente útil al usar Device Sync, donde no se sabe cuándo ni durante cuánto tiempo escribirá el cliente de sincronización.
// Add Leia to the realm using `writeAsync` Person leia = Person(ObjectId(), "Leia"); realm.writeAsync(() { realm.add<Person>(leia); });
Crear objetos
Los ejemplos de esta página utilizan dos tipos de objetos, Person y Team.
() class _Person { () late ObjectId id; late String name; late List<String> hobbies; } () class _Team { () late ObjectId id; late String name; late List<_Person> crew; late RealmValue eventLog; }
Crear un objeto
Para agregar un objeto a la base de datos, pasa una instancia de una clase de objeto Realm a la base de datos en un bloque de transacción de escritura con Realm.add().
realm.write(() { realm.add(Person(ObjectId(), 'Lando')); });
Crear múltiples objetos
Para agregar múltiples objetos a una base de datos, pase una lista de múltiples objetos a Realm.addAll() dentro de un bloque de transacción de escritura.
realm.write(() { realm.addAll([ Person(ObjectId(), 'Figrin D\'an'), Person(ObjectId(), 'Greedo'), Person(ObjectId(), 'Toro') ]); });