Подтвердить что ты не робот

Как управлять большим набором данных на мобильном устройстве

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

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

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

Любые идеи?

4b9b3361

Ответ 1

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

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

Ответ 2

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