Форум программистов, компьютерный форум CyberForum.ru

Android и sqlite - Android

Войти
Регистрация
Восстановить пароль
 
Ieroglif
 Аватар для Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
12.06.2014, 23:19     Android и sqlite #1
Вечер добрый, товарищи!

Вопрос такой: как быстро считывать и передавать большое кол-во данных между приложением и БД? Речь идёт о десятках и сотнях тысяч элементов.

Если можно - с примером.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
13.06.2014, 01:53     Android и sqlite #2
... Вы загнули с маштабами!
Конечно обычным запросом. Но боюсь что такой запрос без оптимизаций может на долго зависнуть андроид.
Почитайте для начала про работу с базами. Учебников много!

В две строчки это примером не показать! Там куча кода...
Ieroglif
 Аватар для Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
13.06.2014, 09:57  [ТС]     Android и sqlite #3
Считаете? Мне надо хранить в базе координаты вершин меша и относительно быстро читать их при рисовании объекта. Каждый раз читать файл - не вариант - долго. Остаётся БД.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
13.06.2014, 11:22     Android и sqlite #4
Ieroglif, если Вы говорите о рендере, то каждый раз считывать тоже не вариант, либо ANR, либо RejectedExecutionException из-за переполнения пула потоков.

Вам нужен промежуточный cache layer.
Ieroglif
 Аватар для Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
13.06.2014, 12:02  [ТС]     Android и sqlite #5
YuraAAA, зачем каждый раз? Один раз загрузить в специально созданный класс, а после передавать на рисование.
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
13.06.2014, 12:17     Android и sqlite #6
Ieroglif, тогда в чём проблема?

Из документации:
The theoretical maximum number of rows in a table is 264 (18446744073709551616 or about 1.8e+19). This limit is unreachable since the maximum database size of 140 terabytes will be reached first. A 140 terabytes database can hold no more than approximately 1e+13 rows, and then only if there are no indices and if each row contains very little data.

Работайте себе спокойно с десятками и сотнями тысяч записей.
Ieroglif
 Аватар для Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
13.06.2014, 12:22  [ТС]     Android и sqlite #7
YuraAAA, проблема в скорости передачи данных.
Например, есть файл ~ .obj 6,5 мб, считывается он где-то за 30-40 с - это плохо. Данные (~ 210 тыс вершин, у каждой по 7 параметров ~ 1.4 млн записей) записываются в таблицу за 23-25 секунд. Как мне кажется, это тоже долго. Вопрос - как ускорить процесс записи? И как максимально оптимизировать процесс считывания?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
13.06.2014, 12:26     Android и sqlite #8
Ieroglif, для записей неблокирующий insert или transaction.
Для чтения...ну если это обычный select без join-ов, наверное, никак. Он и так будет быстрым.
Ieroglif
 Аватар для Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
13.06.2014, 12:32  [ТС]     Android и sqlite #9
YuraAAA, неблокирующий? Это как, можете пояснить?

Я посредством транзакции и делал:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
                 myDB.beginTransaction();
                 for(int j = 0; j < vertexes.length; j += 3)
                 {
 
                     myCV.put("X", vertexes[j]);
                     myCV.put("Y", vertexes[j+1]);
                     myCV.put("Z", vertexes[j+2]);
                     
                     myCV.put("XN", normals[j]);
                     myCV.put("YN", normals[j+1]);
                     myCV.put("ZN",normals[j+2]);
                     
                     myCV.put("ParentID", IDofPart);
                     long pointRow = myDB.insert("Points", null, myCV);                    
                 }  
           
                myDB.setTransactionSuccessful();
                myDB.endTransaction();
Добавлено через 3 минуты
YuraAAA, то есть классическая конструкция для считывания наиболее оптимальна?

Java
1
  myCursor = myDB.query("Production", what, where, atr, null, null, null);
- что-то по типу этого?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
13.06.2014, 12:37     Android и sqlite #10
Ieroglif, вот вот, так и делайте) Только посмотрите ограничение для транзакций.

и ещё. Заверните в try-catch:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
try {
 myDB.beginTransaction();
                 for(int j = 0; j < vertexes.length; j += 3)
                 {
 
                     myCV.put("X", vertexes[j]);
                     myCV.put("Y", vertexes[j+1]);
                     myCV.put("Z", vertexes[j+2]);
                     
                     myCV.put("XN", normals[j]);
                     myCV.put("YN", normals[j+1]);
                     myCV.put("ZN",normals[j+2]);
                     
                     myCV.put("ParentID", IDofPart);
                     long pointRow = myDB.insert("Points", null, myCV);                    
                 }  
           
                myDB.setTransactionSuccessful();
} catch(exception e) {
} finally {
                myDB.endTransaction();
}
Добавлено через 21 секунду
Ieroglif,
Цитата Сообщение от Ieroglif Посмотреть сообщение
то есть классическая конструкция для считывания наиболее оптимальна?
да
Ieroglif
 Аватар для Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
13.06.2014, 12:37  [ТС]     Android и sqlite #11
И да, как подсчитать кол-во записей в таблице с определённым условием?
YuraAAA
 Аватар для YuraAAA
1563 / 1305 / 269
Регистрация: 25.10.2009
Сообщений: 3,424
Записей в блоге: 2
13.06.2014, 12:43     Android и sqlite #12
Ieroglif,
Java
1
2
3
Cusor c = db.rawQuery("SELECT count(id) FROM TABLE_NAME where name = 'name';", null);
cur.moveToFirst();
int count = (int) cur.getLong(cur.getColumnIndex("count"));
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 12:48     Android и sqlite
Еще ссылки по теме:

Android Импорт данных из Excel в SQLite Android
Android SQLite как записать результат запроса в переменную (Android, Java)
SQLite Android Android
Как быстро подключить готовую БД SQLite к проекту Android Android
Android SQLite и android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ieroglif
 Аватар для Ieroglif
18 / 18 / 1
Регистрация: 23.06.2011
Сообщений: 237
13.06.2014, 12:48  [ТС]     Android и sqlite #13
YuraAAA,
Спасибо!
Yandex
Объявления
13.06.2014, 12:48     Android и sqlite
Ответ Создать тему
Опции темы

Текущее время: 09:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru