Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
#1

Android и sqlite - Программирование Android

12.06.2014, 23:19. Просмотров 901. Ответов 12
Метки нет (Все метки)

Вечер добрый, товарищи!

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

Если можно - с примером.
http://www.cyberforum.ru/android-dev/thread1700481.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2014, 23:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Android и sqlite (Программирование Android):

SQLite и android
Привет. Вот решил посмотреть, что же такое android. Проконсультируете...

SQLite Android таблица
Ужас устал помогите пожалуйста! В SQLite добавил дополнительную таблицу:...

SQLite Android и вывод данных в TextView
Использую SQLite для хранения и доступа к данным в андроид-приложении. Задаю ...

Android, ListView, база данных SQLite
Как достать картинку из БД (SQLite) и поместить её в ListView??? помогите,...

Изменить папку хранения БД SQLite Android
Добрый день, По данной теме уже были похожие посты. Многие хранят данные на cd...

12
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
13.06.2014, 01:53 #2
... Вы загнули с маштабами!
Конечно обычным запросом. Но боюсь что такой запрос без оптимизаций может на долго зависнуть андроид.
Почитайте для начала про работу с базами. Учебников много!

В две строчки это примером не показать! Там куча кода...
0
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
13.06.2014, 09:57  [ТС] #3
Считаете? Мне надо хранить в базе координаты вершин меша и относительно быстро читать их при рисовании объекта. Каждый раз читать файл - не вариант - долго. Остаётся БД.
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
13.06.2014, 11:22 #4
Ieroglif, если Вы говорите о рендере, то каждый раз считывать тоже не вариант, либо ANR, либо RejectedExecutionException из-за переполнения пула потоков.

Вам нужен промежуточный cache layer.
0
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
13.06.2014, 12:02  [ТС] #5
YuraAAA, зачем каждый раз? Один раз загрузить в специально созданный класс, а после передавать на рисование.
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
13.06.2014, 12:17 #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.

Работайте себе спокойно с десятками и сотнями тысяч записей.
0
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
13.06.2014, 12:22  [ТС] #7
YuraAAA, проблема в скорости передачи данных.
Например, есть файл ~ .obj 6,5 мб, считывается он где-то за 30-40 с - это плохо. Данные (~ 210 тыс вершин, у каждой по 7 параметров ~ 1.4 млн записей) записываются в таблицу за 23-25 секунд. Как мне кажется, это тоже долго. Вопрос - как ускорить процесс записи? И как максимально оптимизировать процесс считывания?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
13.06.2014, 12:26 #8
Ieroglif, для записей неблокирующий insert или transaction.
Для чтения...ну если это обычный select без join-ов, наверное, никак. Он и так будет быстрым.
0
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
13.06.2014, 12:32  [ТС] #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);
- что-то по типу этого?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
13.06.2014, 12:37 #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 Посмотреть сообщение
то есть классическая конструкция для считывания наиболее оптимальна?
да
1
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
13.06.2014, 12:37  [ТС] #11
И да, как подсчитать кол-во записей в таблице с определённым условием?
0
YuraAAA
1578 / 1319 / 282
Регистрация: 25.10.2009
Сообщений: 3,436
Записей в блоге: 2
13.06.2014, 12:43 #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"));
1
Ieroglif
19 / 19 / 2
Регистрация: 23.06.2011
Сообщений: 238
13.06.2014, 12:48  [ТС] #13
YuraAAA,
Спасибо!
0
13.06.2014, 12:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.06.2014, 12:48
Привет! Вот еще темы с решениями:

Импорт данных из Excel в SQLite Android
Добрый вечер! Подскажите как имортировать данные из EXCEL файла в в SQLite....

Вывод данных по ключевым словам. Android SQLite
Здравствуйте! Требуется создать приложение, которое бы осуществляло поиск по...

Где хранятся файлы с БД SQLite в Android Studio?
Такая проблема, создал БД, создал колонки с именами, но потом начал...

Копирование файла с Android на PC, или синхронизация SQLite
Здравствуйте!!! У меня на телефоне есть база данных (путь до базы...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru