移动端orm框架性能测评

本文对比了flutter_orm_plugin、coredata、realm、greendao、activeandroid在iOS和Android上的性能,通过循环和批量操作进行数据的插入、查询、更新和删除。测试结果显示,Realm在批量操作时表现出色,而Luakit在无批量接口情况下表现稳定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移动端orm框架性能测评

flutter_orm_plugin 发布以来,不少团队试用了,我发现大家对这类数据库相关的库,第一反应就是性能如何,之前确实没做太多行业对比,最近觉得还是有必要做一下性能测试,给大家一个交代的。

在ios端,业界比较常用的orm框架应该是苹果官方推出的coredata,还有就是realm了。在android端orm框架我挑了三个比较常用的,greendao,realm和activeandroid。我会用flutter_orm_plugin跟上面提到的ios和android端orm框架做对比。 下面我会分别给出测试用例,测试代码,还有最终数据比较的结果。

测试用例

测试用例我列了以下这些

  • 10000次插入数据
  • 使用批量接口10000次插入数据
  • 10000次读取数据
  • 10000次修改数据
  • 使用批量接口10000次修改数据
  • 10000次删除数据
  • 使用批量接口10000次删除数据

为什么会有普通插入数据和使用批量接口插入数据的区别,大部分orm框架都会对批量操作有一定的优化,所以需要对批量操作进行测试,但是在平时使用,不一定都能用上批量接口(例如多次数据操作不在同一代码块,或者在不同的模块中都要操作数据),所以我们会分别对普通操作和批量操作进行测试。

android 测试代码

首先我们给出flutter_orm_plugin 的测试代码,由于不想因为flutter和原生channel通讯产生误差,我们直接用Luakit来写lua代码做测试(greendao、realm、activeandroid、coredata都不涉及flutter和原生channel通讯),flutter_orm_plugin其实底层就是luakit的orm框架,这个不影响测试准确性。

循环插入

Luakit定义orm模型结构并做10000次插入,下面的代码是ios和android通用的。

	local Student = {
        __dbname__ = "test.db",
        __tablename__ = "Student",
        studentId = {"TextField",{primary_key = true}},
        name = {"TextField",{}},
        claName = {"TextField",{}},
        teacherName = {"TextField",{}},
        score = {"RealField",{}},
    }
     
    local params = {
        name = "Student",
        args = Student,
    }
    
    Table.addTableInfo(params,function ()
    	local studentTable = Table("Student”)
	    for i=1,10000 do
	           local s = {
	               studentId = "studentId"..i,
	               name = "name"..i,
	               claName = "claName"..i,
	               teacherName = "teacherName"..i,
	               score = 90,
	           }
	           studentTable(s):save()
	    end
 	end)

activeandroid定义orm模型结构并做10000次插入


@Table(name = "Students")
public class Student extends Base {
   
    @Column(name = "studentId")
    public String studentId;
    @Column(name = "name")
    public String name;
    @Column(name = "claName")
    public String claName;
    @Column(name = "teacherName")
    public String teacherName;
    @Column(name = "score")
    public float score;
    public Student() {
   
        super();
    }
    @Override
    public String toString() {
   
        return this.studentId;
    }
}

for (int i=0 ; i<10000 ;i++) {
   
    ActiveAndroid.beginTransaction();
    Student s = new Student();
    s.studentId = "studentId"+i;
    s.name = "name"+i;
    s.teacherName = "teacherName"+i;
    s.claName = "claName"+i;
    s.score = 90;
    s.save();
    ActiveAndroid.setTransactionSuccessful();
    ActiveAndroid.endTransaction();
}

realm android 定义orm模型结构并做10000次插入


public class StudentRealm extends RealmObject {
   
    @PrimaryKey
    private String studentId;
    @Required
    private String name;
    @Required
    private String teacherName;
    @Required
    private String claName;
    private float score;
    public String getName() {
   
        return name;
    }
    public void setName(String name) {
   
        this.name = name;
    }
    public String getClaName() {
   
        return claName;
    }
    public void setClaName(String ClaName) {
   
        this.claName = claName;
    }
    public String getTeacherName() {
   
        return teacherName;
    }
    public void setTeacherName(String teacherName) {
   
        this.teacherName = teacherName;
    }
    public String getStudentId() {
   
        return studentId;
    }
    public void setStudentId(String id) {
   
        this.studentId = id;
    }
    public float getScore() {
   
        return score;
    }
    public void setScore(float score) {
   
        this.score = score;
    }
}
for (int i=0 ; i<10000 ;i++) {
   
    realm.beginTransaction();
    StudentRealm realmStudent = realm.createObject(StudentRealm.class,"studentId"+i);
    realmStudent.setName("name"+i);
    realmStudent.setTeacherName("setTeacherName"+i);
    realmStudent.setClaName("setClaName"+i);
    realmStudent.setScore(90);
    realm.commitTransaction();
}


GreenDao定义orm模型结构并做10000次插入

@Entity()
public class Student {
   
    @Id
    private String studentId;
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值