Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с RMS, медленная запись большого объема данных 
:(
    Опции темы
panik
Дата 6.7.2009, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.7.2009

Репутация: нет
Всего: нет



Здравствуйте!

Столкнулся с такой вот проблемой:
получаю данные с Интернет и необходимо сохранить их в хранилище RMS
Непосредственно запись (сохранение) происходит очень медленно (почти две минуты).

Запись произвожу в цикле перебирая массив длиной примерно 460 значений.

Как можно ускорить процесс записи в RMS?

PM MAIL   Вверх
W0LF
Дата 6.7.2009, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



а код можно?


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Skynin
Дата 6.7.2009, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 1.7.2007
Где: Харьков

Репутация: 2
Всего: 10



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

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

Это сообщение отредактировал(а) Skynin - 6.7.2009, 15:35
PM MAIL WWW ICQ Skype GTalk YIM MSN   Вверх
panik
Дата 6.7.2009, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.7.2009

Репутация: нет
Всего: нет



Вот кусок кода, отвечающий за запись в RMS:

                         ByteArrayOutputStream baos = new ByteArrayOutputStream();
              DataOutputStream dos = new DataOutputStream(baos);
                           
              try {
                  RecordStore recordStore = RecordStore.openRecordStore("weater", true);
                     
                      for(kk=0;kk<vi;kk++){
                              dos.writeUTF(valuearray[kk]);
                      recordStore.addRecord(baos.toByteArray(), 0, baos.size());
                                                        }
                 
                             recordStore.closeRecordStore(); 
                   }
              catch(IOException ioe) {}
                   catch(RecordStoreException rse){
                            System.out.println(rse.getMessage());
                                                                       }


Skynin,  отдельным потоком писать это конечно как вариант интересен.
Но в моем случае скорее не подойдет, т.к. после сохранения я хочу в вывести информацию на основе сохраненных данных и я так думаю пользователь быстро ознакомится с результатами и закроет программу раньше, чем сохранятся данные.
PM MAIL   Вверх
panik
Дата 6.7.2009, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 6.7.2009

Репутация: нет
Всего: нет



Придумал решение!!!

Теперь вместо сохранения в 2 минуты тратится всего секунда!

Кому может интересно:
делю массив данных по 100 значений. Между каждым значением ставлю разделитель и записываю в RMS
Таким образом, в моем случае при примерно массиве данных длиной 460 значений, делю массив, например по 100 значений, ставлю разделители и записываю в RMS. В результает получаю 5 записей и сохраняются эти записи максимум 1 секунду.
PM MAIL   Вверх
W0LF
Дата 7.7.2009, 03:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



правильное решение, я чета всегда думал что значения одинаковой предметной области так и должны писаться по умолчанию, самое первое что я когда-то писал в RMS - логин/пароль, и это было в одной записи.
Да, и еще одно - при записи/удалении id не переписывается а продолжает свой счет, максимальный id, если не ошибаюсь, равен инту.  вполне хватит конечно, но стоит просто об этом помнить =)


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0456 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.