Sobes.tech
Junior

Quale database utilizzi nei tuoi progetti?

sobes.tech AI

Risposta dell'AI

Ho utilizzato diverse opzioni, a seconda dei requisiti del progetto:

  • Library Persistente di Room: La più comune. Fornisce uno strato astratto conveniente sopra SQLite, riducendo notevolmente la quantità di codice boilerplate e garantendo la verifica delle query in fase di compilazione. Ideale per la maggior parte degli scenari tipici delle app Android.
  • SQLite direttamente: Nei progetti più vecchi o quando era necessario un accesso di basso livello e il controllo completo sugli schemi e le query. Richiede più lavoro manuale.
  • Realm: In diversi progetti dove la performance per la gestione di grandi volumi di dati e oggetti complessi era importante. Realm è un database orientato agli oggetti, comodo quando si lavora con modelli di dati.
  • Firebase Realtime Database / Cloud Firestore: Per progetti che richiedono sincronizzazione dei dati in tempo reale tra dispositivi e archiviazione cloud. La scelta tra loro dipendeva dalla struttura dei dati e dalle esigenze di query. Realtime Database è adatto ai dati in forma di albero JSON, mentre Cloud Firestore per le collezioni di documenti.

La scelta di un database specifico dipende da fattori come:

  • Volume e tipo di dati.
  • Complessità delle query.
  • Requisiti di prestazioni.
  • Necessità di sincronizzazione dei dati.
  • Livello di esperienza del team.
  • Disponibilità di soluzioni e librerie già pronte.

Ad esempio, una tipica implementazione con Room include:

// entità
@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Int,
    val name: String
)

// dao
@Dao
interface UserDao {
    @Query("SELECT * FROM users")
    fun getAll(): Flow<List<User>>

    @Insert(onConflict = OnConflictStrategy.IGNORE)
    suspend fun insert(user: User)
}

// database
@Database(entities = [User::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
    abstract fun userDao(): UserDao
}