2017-02-06 3 views
1

Это модель для моего RealmObject класса:скорость операции поиска в базе данных Realm

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; 
    } 
} 

И это, как я искать uid из моей области по умолчанию:

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

Теперь, вопрос: Учитывая, что у меня 10-100 объектов внутри моего царства, насколько бы быстрым был поиск?

Вариант использования предназначен для приложения для распознавания изображений. Когда приложение распознает изображение, оно возвращает uid и на основе uid мне необходимо предоставить наложение на экране информации, связанной с uid как можно скорее.

Теперь, когда у меня есть около 10-100 объектов, будет линейный поиск O(n) или общий двоичный поиск O(log n) будет быстрее, чем Realm поиск Я использовал выше? Или можно настроить Realm, чтобы получить более быстрые результаты? (в случае, если он не выполняет самый быстрый способ сейчас).

ответ

0

Выполнение поиска в Realm всегда будет быстрее, поскольку вы можете выполнить весь поиск внутри ядра C++. Выполнение поиска само по себе означает, что вы столкнулись с накладными расходами между Java и C++.

Единственное требование для выполнения быстрого поиска для отдельных элементов является то, что у вас есть @Index аннотацию на поле, но в вашем случае, если вы уже имеете @PrimaryKey, который автоматически применяет @Index аннотацию, а также.

Таким образом, ваш запрос выполняется так быстро, как может быть. Кроме того, для 10-100 объектов, независимо от того, что вы делаете, это, вероятно, будет мгновенно для пользователя.

+0

Благодарим вас за то, что он разъяснил это полностью :) – OBX

+0

Кроме того, возможно, стоит использовать findFirstAsync и использовать прослушиватель изменений, если запрос выполняется из потока пользовательского интерфейса. –

Смежные вопросы