Ответ 1
Несмотря на то, что вы нашли некоторые подробности, я попытаюсь предоставить подробный ответ:
1. Использует ли это использование двойного хранилища?
Да, да. Кроме того, он может использовать событие больше пространства. Например, для широко известного набора данных Enron E-Mail Dataset и FTS3 просто почувствуйте разницу:
Таблица FTS3 потребляет около 200 МБ на диске по сравнению с просто 1453 МБ для обычной таблицы
Таблица FTS3 заняла чуть меньше 31 минут для заполнения, против 25 для обычной таблицы
Это делает ситуацию немного неприятной, но все равно полнотекстовый поиск стоит того.
2. Можно ли использовать такую виртуальную таблицу, как обычную таблицу?
Короткий ответ нет, вы не можете. Виртуальная таблица - это просто какой-то вид с несколькими ограничениями. Вы уже заметили несколько.
Как правило, вы не должны использовать какую-либо функцию, которая кажется неестественной для представления. Только минимальный минимум, необходимый для того, чтобы ваше приложение полностью использовало полнотекстовый поиск. Так что сюрпризов не будет позже, с более новой версией модуля.
Для этого решения нет волшебства, это всего лишь компромисс между производительностью, требуемым дисковым пространством и функциональностью.
Окончательный вывод
Я бы очень рекомендовал использовать FTS4, потому что он быстрее, и единственным недостатком является дополнительное пространство для хранения.
В любом случае вам необходимо тщательно разработать виртуальную таблицу с учетом дополнительного и узкоспециального характера такого решения. Другими словами, не пытайтесь заменить свою начальную таблицу на виртуальную. Используйте оба с большой осторожностью.
Обновление Я бы рекомендовал просмотреть следующую статью: полнотекстовый поиск iOS с основными данными и SQLite. Несколько интересных моментов:
- Виртуальная таблица создается в той же базе данных SQLite, в которой находится содержимое основных данных. Чтобы эта таблица была как можно более легкой вставляются только свойства объекта, относящиеся к поисковому запросу.
- Реализация SQLite предлагает то, что Core Data не выполняет: полнотекстовый поиск. Кроме того, он выполняет почти на 10% быстрее и, по крайней мере, На 660% больше (памяти), чем сопоставимый запрос Core Data.