数据库类型 | 特点 | 适用场景 |
---|---|---|
Firebase Realtime Database | 实时同步、NoSQL、基于JSON结构,集成Firebase认证 | 实时聊天、协作应用 |
Firebase Firestore | 支持复杂查询、ACID事务、扩展性更强,兼容Realtime Database功能 | 中大型应用、复杂数据结构 |
MySQL/PostgreSQL | 关系型数据库,支持SQL语法、事务特性 | 传统业务系统、复杂关联数据 |
MongoDB | 文档型NoSQL数据库,高扩展性,支持地理空间查询 | 大数据存储、日志系统 |
酷盾安全TDSQL | 兼容MySQL协议,金融级稳定性,支持分布式事务 | 高并发企业级应用 |
阿里云PolarDB | 分钟级弹性扩缩容,兼容MySQL/PostgreSQL,读写分离 | 动态流量场景 |
步骤:
添加依赖:
// Realtime Database implementation 'com.google.firebase:firebase-database:20.1.0' // Firestore implementation 'com.google.firebase:firebase-firestore:24.4.0'
配置google-services.json
文件(下载自Firebase控制台)
初始化并连接:
// Realtime Database FirebaseDatabase database = FirebaseDatabase.getInstance(); DatabaseReference ref = database.getReference("users"); // Firestore FirebaseFirestore db = FirebaseFirestore.getInstance(); db.collection("users").add(new User("John")) .addOnSuccessListener(documentReference -> {}) .addOnFailureListener(e -> {});
方案对比:
| 方案 | 优点 | 缺点 |
|—————|———————–|—————————|
| REST API | 跨平台、轻量级 | 需自行处理认证/状态码 |
| JDBC直连 | 原生SQL支持 | 需处理网络线程、SSL |
| ORM框架 | 对象关系映射 | 学习成本高 |
示例代码(Retrofit+MySQL):
// 1. 定义API接口 public interface ApiService { @GET("/users") Call<List<User>> getUsers(); } // 2. 初始化Retrofit Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://your-cloud-mysql-api.com/") .addConverterFactory(GsonConverterFactory.create()) .build(); // 3. 发起请求 ApiService api = retrofit.create(ApiService.class); api.getUsers().enqueue(new Callback<List<User>>() { @Override public void onResponse(Call<List<User>> call, Response<List<User>> response) { // 处理数据 } @Override public void onFailure(Call<List<User>> call, Throwable t) { // 处理错误 } });
通用步骤:
// JDBC连接MySQL示例 String url = "jdbc:mysql://your-db-url:3306/dbname?useSSL=true"; Properties props = new Properties(); props.setProperty("user", "username"); props.setProperty("password", "password"); Connection conn = DriverManager.getConnection(url, props);
风险类型 | 防护措施 |
---|---|
数据明文传输 | 强制使用HTTPS,启用TLS1.2+ |
SQL注入攻击 | 参数化查询(PreparedStatement)、ORM框架自动防注入 |
密钥泄露 | 使用Android Keystore存储敏感信息,避免硬编码 |
越权访问 | 后端设置RBAC权限模型,前端传递Token时附加有效期校验 |
原因分析:
解决方案:
https://
前缀访问API优化方案:
Persistence
缓存: FirebaseDatabase.getInstance().setPersistenceEnabled(true);
Q1:如何在离线状态下保证数据不丢失?
A1:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
// Room实体定义 @Entity public class Task { @PrimaryKey(autoGenerate = true) public int id; public String content; public boolean synced; // 标记是否已同步 }
Q2:如何处理高并发下的数据冲突?
A2:
version
字段,更新时校验版本号 UPDATE tasks SET content = ?, version = version + 1 WHERE id = ? AND version = ?;
_id
作为唯一