Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Ieroglif
19 / 19 / 1
Регистрация: 23.06.2011
Сообщений: 238
#1

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

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

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

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

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

SQLite и android - Программирование Android
Привет. Вот решил посмотреть, что же такое android. Проконсультируете пожалуйста. 1. На сколько эффективно работает SQLite с 5-10...

SQLite Android - Программирование Android
Привет всем! У меня образовалась такая проблема: пишу приложение на android, при этом воспользовавшись макетом "Master/Detal Flow". Мне...

SQLite Android таблица - Программирование Android
Ужас устал помогите пожалуйста! В SQLite добавил дополнительную таблицу: public static final String KEY_NAME = "Name"; После этого где...

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

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

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

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

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

Вам нужен промежуточный cache layer.
0
Ieroglif
19 / 19 / 1
Регистрация: 23.06.2011
Сообщений: 238
13.06.2014, 12:02  [ТС] #5
YuraAAA, зачем каждый раз? Один раз загрузить в специально созданный класс, а после передавать на рисование.
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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 / 1
Регистрация: 23.06.2011
Сообщений: 238
13.06.2014, 12:22  [ТС] #7
YuraAAA, проблема в скорости передачи данных.
Например, есть файл ~ .obj 6,5 мб, считывается он где-то за 30-40 с - это плохо. Данные (~ 210 тыс вершин, у каждой по 7 параметров ~ 1.4 млн записей) записываются в таблицу за 23-25 секунд. Как мне кажется, это тоже долго. Вопрос - как ускорить процесс записи? И как максимально оптимизировать процесс считывания?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
13.06.2014, 12:26 #8
Ieroglif, для записей неблокирующий insert или transaction.
Для чтения...ну если это обычный select без join-ов, наверное, никак. Он и так будет быстрым.
0
Ieroglif
19 / 19 / 1
Регистрация: 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
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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 / 1
Регистрация: 23.06.2011
Сообщений: 238
13.06.2014, 12:37  [ТС] #11
И да, как подсчитать кол-во записей в таблице с определённым условием?
0
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 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 / 1
Регистрация: 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
Привет! Вот еще темы с ответами:

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

Копирование файла с Android на PC, или синхронизация SQLite - Программирование Android
Здравствуйте!!! У меня на телефоне есть база данных (путь до базы /data/data/имя приложения/databases/baza.db). Когда тестировал на...

Как быстро подключить готовую БД SQLite к проекту Android - Программирование Android
Решил написать мини гайд по подключению готовой БД, мне это пригодится неоднократно, надеюсь кому-то будет полезно: Создать папку...

Как обновить одно поле в таблице SQLite Android - Программирование Android
Привет. Встал вопрос... Как обновить только одну запись в таблице SQLite - Android. Обновлять всю запись слишком много лишнего кода...


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

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

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