Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Limit Realm results

Tags:

android

realm

How do I limit the amount of objects Realm returns? .findAll returns all rows matching the query and .findFirst returns only the first. But what about something like first 1000? .findAll may return so many rows that it consumes way too much memory.

like image 441
Tapani Avatar asked Apr 24 '15 16:04

Tapani


2 Answers

The cool thing is that you don't need to worry about that with Realm. The result object returned from a query is lazily loading the objects and its fields when you access them. Your objects are never copied and thus only represented once in memory/disk.

The (current) implementation detail of this is that the RealmResults object returned from a query is just a list of references to the matching objects. Those references are tiny numbers which are stored compressed so they take up very little memory. So even with 100.000 matches it actually wouldn't take up much memory. And it would take up the same amount of memory for all kind of objects, whether they have one int field or hundreds of fields with strings or big binaries.

like image 140
bmunk Avatar answered Nov 15 '22 18:11

bmunk


I figured out the solution to achieve this after so many days using "between" query as found in the official docs https://realm.io/docs/java/latest

If you want to fetch first N elements, Simply pass the count from and to with field name as below

realm.where(clazz).between("count",0,1000).findAll();

Where,

"count" = Field name (i.e variable name in your pojo)
"0" = Range From
"1000" = Range to

For example: The above query will fetch first 0 to 1000 as RealmResults.

Note: The above solution works only if you have some unique id with row count. In my case I manually inserted row count value before inserting the values into Realm.

like image 28
Chandru Avatar answered Nov 15 '22 18:11

Chandru