2015-04-23 2 views
2

У меня есть макс. 600000 объектов в моей базе данных. Я делаю запросы по id (int) =, uuid = и time (int) < = и результаты упорядочены по времени. Должен ли я использовать аннотацию @Index для некоторых полей и, возможно, изменить идентификатор от Integer до String? Запросы будут медленными, потому что я не могу индексировать поле времени и не могу иметь множественный индекс поля? Будет ли Sqlite лучше соответствовать моей потребности?Должен ли я использовать @Index с Realm?

Кроме того, если я храню большое количество объектов в базе данных сразу, следует ли использовать одну транзакцию для всех объектов или создать новую транзакцию для каждого объекта? Сколько памяти будет потреблять большая транзакция и есть ли производительность при создании новой транзакции для каждого объекта?

База данных будет находиться на внешнем накопителе (карте памяти) устройства Android.

ответ

0

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

Что касается транзакций, то, как правило, быстрее выполняется партия в одной транзакции, поскольку есть накладные расходы, связанные с созданием и совершением транзакции, но все внутри транзакции должно соответствовать памяти. Поэтому в зависимости от того, насколько велик набор данных, его, возможно, придется разбивать на более мелкие партии. Опять же, создание небольшого доказательства концепции - это, вероятно, лучший подход, чтобы увидеть, что лучше всего работает в вашем конкретном случае.

+0

Итак, я предполагаю, что если Realm не может использовать индексы, он сделает «сканирование полной строки»? Являются ли индексы реальными индексами b-дерева, где вы можете создавать и другие, кроме равных запросов или просто хеш-таблицы? Как выполняется сортировка? Является ли результирующий набор отсортированным в памяти после запроса или при выполнении запроса? – Tapani

+0

Realm основан на столбце, поэтому поиск отдельных столбцов на самом деле очень быстрый. Наши индексы - это b + деревья, и сортировка выполняется в памяти после запроса. –

+0

Означает ли это, что все строки считываются в память и сортируются, даже если я получаю доступ только к первым двум объектам в наборе результатов? – Tapani

2

Вы должны обязательно использовать @Index в любом поле, которое вы используете в любых запросах.

Это значительно улучшает скорость работы/запросов.

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