java - Realm 数据库中的搜索操作速度

标签 java android performance search realm

这是我的 RealmObject 类的模型:

    public class ARDatabase extends RealmObject
    {
    @PrimaryKey
    private String uid;

    private String namex;
    private String desc;
    private boolean isVideo;
    private boolean isDeleted;
    private String urlImg;
    private String urlApp;
    private int updates;
    private boolean isDownloaded;
    private String location;

    public ARDatabase(){}

    public String getUid()
    {
        return uid;
    }

    public void setUid(String uid)
    {
        this.uid = uid;
    }

    public String getNamex()
    {
        return namex;
    }

    public void setNamex(String namex)
    {
        this.namex = namex;
    }

    public String getDesc()
    {
        return desc;
    }

    public void setDesc(String desc)
    {
        this.desc = desc;
    }

    public boolean getIsVideo()
    {
        return isVideo;
    }

    public void setIsVideo(boolean isVideo)
    {
        this.isVideo = isVideo;
    }

    public boolean getIsDeleted()
    {
        return isDeleted;
    }

    public void setIsDeleted(boolean isDeleted)
    {
        this.isDeleted = isDeleted;
    }

    public String getUrlImg()
    {
        return urlImg;
    }

    public void setUrlImg(String urlImg)
    {
        this.urlImg = urlImg;
    }

    public String getUrlApp()
    {
        return urlApp;
    }

    public void setUrlApp(String urlApp)
    {
        this.urlApp = urlApp;
    }

    public int getUpdates()
    {
        return updates;
    }

    public void setUpdates(int updates)
    {
        this.updates = updates;
    }

    public boolean getIsDownloaded()
    {
        return isDownloaded;
    }

    public void setIsDownloaded(boolean isDownloaded)
    {
        this.isDownloaded = isDownloaded;
    }

    public String getLocation()
    {
        return location;
    }

    public void setLocation(String location)
    {
        this.location = location;
    }
}

这就是我从默认 Realm 搜索 uid 的方式:

final ARDatabase db = mRealm.where(ARDatabase.class).equalTo("uid",imageTitles.get(result)).findFirst();

现在,问题是:考虑到我的 Realm 内有 10-100 个对象,搜索速度有多快?

该用例适用于图像识别应用程序。当应用程序识别图像时,它会返回 uid,并且根据 uid,我需要尽快在屏幕上提供一个覆盖层,其中包含与 uid 关联的信息。

现在,由于我有大约 10-100 个对象,线性搜索 O(n) 或通用二分搜索 O(log n) 会比我上面使用的 Realm 搜索更快吗?或者是否可以调整Realm以获得更快的结果? (以防它现在没有以最快的方式执行)。

最佳答案

在 Realm 中进行搜索总是会更快,因为您可以在 C++ 核心内执行整个搜索。自己进行搜索意味着您会产生在 Java 和 C++ 之间来回切换的开销。

快速搜索单个元素的唯一要求是您在字段上有一个 @Index 注释,但在您的情况下,您已经有 @PrimaryKey 它也会自动应用 @Index 注释。

所以您的查询速度尽可能快。此外,对于10-100个对象,无论你做什么,它可能都会瞬间出现在用户面前。

关于java - Realm 数据库中的搜索操作速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42060003/

相关文章:

java - 执行线程核心数

Java 的 Lambda 流过滤器计数比 For 和 Foreach 循环慢

MySQL选择列是另一列中的值

android - Android Studio中重复gradle属性错误

java - 获取高阶函数中函数参数的名称

java - Android 保存并检查,单选按钮

c++ - 不同线程上的动态分配会减慢我的主处理线程吗?

java - 如何使用java从网页的URL中提取查询字符串

java - 请求参数丢失加号

java - 尝试暂时停止使用代码 "break()"进行下一个 Activity 。为什么这不起作用?