Как управлять большим набором данных на мобильном устройстве - PullRequest
16 голосов
/ 09 мая 2011

В настоящее время я использую японский словарь и хотел бы поделиться некоторыми идеями о том, как быстро и эффективно находить записи.Сами записи словаря загружаются и хранятся в классе, в котором размещены слова на японском языке (возможно, с несколькими написаниями), их фонетическое произношение и определения на английском языке в виде трех списков.

У меня изначально была древовидная структура, где каждый узел представлял собой символ в слове.Это было очень быстро, но, к сожалению, использовало много памяти.Само определение данных составляет около 35 мг, а сама древовидная структура была около 130 мг.Кроме того, он также разрешен только для поиска с японского -> английский.Память вызывает беспокойство, поскольку помимо необходимости в дополнительных индексах предполагается, что будет существовать версия приложения для Windows Phone 7.Словарь содержит 150000 записей.

Подводя итог, я должен сделать следующее: сохранить список определений. В этом списке три индекса для японского, фонетического и английского значений.Ускорение поиска (в идеале менее 1 секунды). Используйте как можно меньше памяти (ограничение использования памяти в Windows Phone 7 составляет 90 мг)

Есть идеи?

Ответы [ 2 ]

6 голосов
/ 09 мая 2011

Вам следует рассмотреть возможность использования мобильной базы данных или веб-службы для обработки такого большого количества данных на мобильном устройстве.Вид производительности, функций и управления, которые вы ищете, очень трудно получить на любой платформе, но вам это не нужно.Используйте базу данных с правильными индексами и таблицами, локальными или удаленными.

SQL CE недоступен для WP7, но есть другие опции , коммерческие и с открытым исходным кодом.Кроме того, если вы ожидаете частого подключения и все в порядке с небольшой задержкой, рассмотрите возможность использования веб-службы.Вы можете использовать любую базу данных на центральном сервере, представленную вам через веб-сервис.Ваше узкое место будет связано с коммуникацией, но вы выгрузите значительное количество обработки с ограниченного устройства.

1 голос
/ 09 мая 2011
  • Самое простое решение: на стороне клиента принимает только входные данные, затем отправляет запрос на на стороне сервера , а на стороне сервера возвращаетвывод на клиентскую сторону .
  • Другой способ - отключить приложение:
    1. Список японских слов должен быть отсортирован в лексикографическом порядке , как и два других списка.
    2. Поскольку у японцев 50 букв, список можно разбить на 50 * 50 частей по первым двум буквам слова.Таким образом, ключевой момент заключается в следующем: подготовить массив 50 * 50, записав смещения , соответствующие начальной позиции первых двух букв в файле.Если для хранения смещений используется 32-разрядное целое число, это будет стоить 10 КБ.
    3. Для каждого японского слова сохраните значения в двух других списках.Для удобства два списка можно объединить вместе.Если для хранения смещений используется 32-битное целое число, а у вас 150000 записей, это увеличит размер данных на 600 КБ.
    4. Сохраните массив смещений в памяти. При вводе японского слова сначала найдите смещение по первым двум буквам, затем прочитайте все японские слова, начиная спервые две буквы.Потому что у вас 150000 записей, поэтому в среднем количество слов, начинающихся с тех же двух букв, составляет 60. И страница памяти составляет 4 КБ, достаточно для 60 слов, поэтому только 1 IO нужно.После того, как вы найдете смещения в двух других списках, прочитайте соответствующее содержание.Таким образом, в операции поиска требуется только 2 IO .И стоимость расчета тоже мала, стоимость памяти тоже очень низкая.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...