Страница 1 из 5
Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 12:23
Mikhail_dev
Собственно я давно уже особо не вникал в данную тему и реализовывал БД в простом варианте(пару таблиц, пару связей). На данный момент интересует ПРАВИЛЬНЫЙ подход к управлению SQLite. Хотя может быть и не SQLite, но вдруг именно для SQLite есть что-то интересное. пара вопросов:
1. Используете ли вы ORM подход для работы с данными?
2. Как лучше читать/писать данные в базу? (правильная архитектура). Синглтон какой-нибудь для обработки, либо какие-то CursorLoaders, либо еще что-то.
3. Место хранения базы. Если база небольшая, в основном текстовые данные, то где вы стараетесь её хранить? Используете ли какую-нибудь синхронизацию, если приложение клиент-серверное? Может у гугла есть какое-то API, которое позволяет делать синхронизацию с его серверами?
4. Интересуют актуальные статьи по этому поводу, желательно свежие, а также желательно на английском языке. Видео на английском к сожалению пока не могу воспринимать, уровень не тот.
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 12:27
rezak90
Спроси тётю Инну, или вы по этому поводу и ссорились?
1. Да, если не ошибаюсь то сейчас это ActiveDroid;
2. В оф туториале и книгах пишут что контент провайдер;
3. Я читал книгу Android PRO, там прекрасно всё написано;
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 12:33
Mikhail_dev
Спроси тётю Инну, или вы по этому поводу и ссорились?
Это они с Денисом.
P.S. Слава, я добавил еще один маленький вопрос =)
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 12:40
anber
Сейчас придет
Foenix и расскажет как правильно
UPD. опоздал
UPD2. Собственно я так понимаю интересует только база данных которая создается приложением с нуля, или вычитывание из существующей тоже актуально? Так же интересует ли вопрос менеджмента закачиваемых баз данных (например в моем случае человек выбирает какой нибудь город, скажем Москва, по нему выкачивается база, потом он хочет переключиться на Киев, выкачивается его база итд)?
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 12:53
rezak90
m090050 писал(а):P.S. Слава, я добавил еще один маленький вопрос =)
прочитал, по БД я вообще почти профан, и на этот вопрос у меня ответа нету

Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 13:07
KamiSempai
m090050 писал(а):Спроси тётю Инну, или вы по этому поводу и ссорились?
Это они с Денисом.
Мы с ней не ссоримся - это у нас такой рабочий процесс)
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 13:15
rezak90
KamiSempai писал(а):m090050 писал(а):Спроси тётю Инну, или вы по этому поводу и ссорились?
Это они с Денисом.
Мы с ней не ссоримся - это у нас такой рабочий процесс)
она же теперь боится в скайп заходить, и как только начинаешь у неё спрашивать "А что у вас там с проектом" у неё сразу слёзы на глазах наворачиваются... жалко смотреть

Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 13:23
Foenix

ну все все про меня знают, особо Слава
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 14:14
Mikhail_dev
или вычитывание из существующей тоже актуально?
Да, уже есть люди кто пользуется старой версией. Скорее всего придется выкачивать данные со старой и заносить их в новую.
Так же интересует ли вопрос менеджмента закачиваемых баз данных (например в моем случае человек выбирает какой нибудь город, скажем Москва, по нему выкачивается база, потом он хочет переключиться на Киев, выкачивается его база итд)?
это я так думаю уже зависит от того, как построится архитектура. У нас геолокационный сервис, в котором по идее не будет много сущностей в базе, но такие вещи как закладки, история поиска, оффлайн режим трека (т.е. запись трека в базу) будут в базе. Т.е. было бы неплохо показать какие-то данные по старому запросу, если нет интернета к примеру, а не просто говорить об его отсутствии. Но это детали. Т.е. другими словами слишком частого общения с базой не предвидится. Сохранение трека идет по алгоритму такому: отправляется местоположение на сервер. Если вдруг интернет обваливается, то точки попадают в коллекцию-очередь. Если накопилось более 20 неотправленных, то в базу сбрасывается 10 из них. Другими словами, мы не дергаем постоянно базу даже при записи трека.
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 16:23
Foenix
Миша, чем тебя существующий подход не устраивает, коли все это есть?
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 17:25
Mikhail_dev
Я не знаю какой сейчас существующий подход. Да и это не единственный вопрос.
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 17:38
Foenix
я имею ввиду у вас в программе
Re: Правильный подход для управления базой данных
Добавлено: 24 янв 2014, 19:36
Mikhail_dev
У нас две базы, которые надо правильно слить в одну, но первая использует ORM подход, поэтому она не может работать с флешкой (работа с базой данных на версии Api7 несколько другая и требует шаманства, а с ORM вообще сходит на нет). Вторая на флешке, кеширует. В общем это разброс и требует полной переделки. К тому же синхронизация с сервером не за горами. Так что надо будет сделать с блекджеком и составляющими.
Re: Правильный подход для управления базой данных
Добавлено: 25 янв 2014, 10:10
Mikhail_dev
Так много топиков с базами данных и что, никто никогда не думал о том, как лучше с ней работать?
Re: Правильный подход для управления базой данных
Добавлено: 25 янв 2014, 13:51
Foenix
я думала.
Re: Правильный подход для управления базой данных
Добавлено: 25 янв 2014, 22:54
anber
m090050 писал(а):Так много топиков с базами данных и что, никто никогда не думал о том, как лучше с ней работать?
Покажу как работал с базой в последнем своем проекте, тут простой пример -
https://github.com/akadatsky/UserDatabaseExample
Основные идеи:
- главная логика в файле UserDatabase
- база хранится в системой папке приложений: /data/data/packagename/databases/user.db
- стандартный метод onUpgrade, в случае если в существующую таблицу нужно добавить столбец или скопировать таблицу в это делается тут
- пример использования:
Код: Выделить всё
private List<User> users;
private UserDatabase userDatabase;
userDatabase = UserDatabase.get(context);
userDatabase.addUser(new User("someName", "someSecondName"));
users = userDatabase.getAllUsers();
userDatabase.removeAllUsers();
- пример метода getAllUsers():
Код: Выделить всё
private static final String USER_TABLE = "user";
private static final CursorMapper<User> userMapper = CursorMapper.create(User.class);
public List<User> getAllUsers() {
Cursor cursor = getReadableDatabase().rawQuery("SELECT * FROM " + USER_TABLE, null);
return userMapper.map(cursor);
}
- каждая запись получает уникальный строковый id типа "s0wXCKAEgoCnlYyNiuLCmw", который удобно использовать при синхронизации с сервером.
- используется кастомный mapper, который из курсора может получить список model, при этом типичная model выглядит так:
Код: Выделить всё
public class User {
@Column("_id")
private String id;
@Column("name")
private String name;
@Column("second_name")
private String secondName;
@Column("created_at")
private Date createdAt;
public User() {
}
public User(String name, String secondName) {
this.name = name;
this.secondName = secondName;
}
// getters and setters
}
- синхронизация с сервером это отдельный вопрос, если интересует расскажу подробнее
Re: Правильный подход для управления базой данных
Добавлено: 26 янв 2014, 08:54
Mikhail_dev
В принципе понял, спасибо. Кстати, была ли необходимость работать с базой с двух процессов?
Re: Правильный подход для управления базой данных
Добавлено: 26 янв 2014, 12:11
anber
m090050 писал(а):В принципе понял, спасибо. Кстати, была ли необходимость работать с базой с двух процессов?
имеется в виду в разных приложения, которые работают с одной базой?
Re: Правильный подход для управления базой данных
Добавлено: 26 янв 2014, 12:19
altwin
m090050 писал(а):Собственно я давно уже особо не вникал в данную тему и реализовывал БД в простом варианте(пару таблиц, пару связей). На данный момент интересует ПРАВИЛЬНЫЙ подход к управлению SQLite. Хотя может быть и не SQLite, но вдруг именно для SQLite есть что-то интересное. пара вопросов:
1. Используете ли вы ORM подход для работы с данными?
2. Как лучше читать/писать данные в базу? (правильная архитектура). Синглтон какой-нибудь для обработки, либо какие-то CursorLoaders, либо еще что-то.
3. Место хранения базы. Если база небольшая, в основном текстовые данные, то где вы стараетесь её хранить? Используете ли какую-нибудь синхронизацию, если приложение клиент-серверное? Может у гугла есть какое-то API, которое позволяет делать синхронизацию с его серверами?
4. Интересуют актуальные статьи по этому поводу, желательно свежие, а также желательно на английском языке. Видео на английском к сожалению пока не могу воспринимать, уровень не тот.
У меня не так много опыта в Android, потому отвечу спецефично для того, с чем сталкивался.
1. Да - всегда, но пишу его всегда сам реализуя только необходимый функционал. Напрямую к базе не обращаюсь никогда, только через объект.
2. В основном базу на устройстве лично я использую для заполнения List/Grid view, после загрузки контента, потому мне хватает стандартных Cursor. При более менее сложной логике работы с базой - только rest. Т.е. я вообще ничего не храню на устройстве, вся логика работы на сервере, Android клиент только передает параметры для формирования insert/select. Но опять же в том случае, если я что то делаю с базой непосредственно в Android - по максимуму использую SQL. Ну а ограничения в досутпности сети у меня пока не возникало в задачах.
P.S. как бы да, делая запрос к примеру к vk.com, это делаю с сервера, далее в Android мне проще.
3. Как и сказал уже я по максимуму исопльзую cloud, на устройстве база в основном динамическая. По поводу API, я использую App Engine или Heroku для серверного кода. Синхронизация, есть google drive и подобное, зависит от клиента, хотя для настоящей синхронизации задачи у меня не было, поскольку, как и говорил базы не устройстве нет.
4. Ничего не читал

Работал с mysql и postgre в django/flask/Yii/symfony, все, что вынес из этого - на сервере использую postgre и никакой возможности оптимизировать sqlite не вижу, потому потребности в изучении чего то спецефичного для нее не было.
P.S> забыл ссылку

по сути не вижу смысла читать больше, чем есть тут:
http://www.androiddesignpatterns.com/20 ... abase.html
Re: Правильный подход для управления базой данных
Добавлено: 26 янв 2014, 13:12
Mikhail_dev
имеется в виду в разных приложения, которые работают с одной базой?
в одном
1. Да - всегда, но пишу его всегда сам реализуя только необходимый функционал. Напрямую к базе не обращаюсь никогда, только через объект.
А пишешь через интерфейс к существующему API андроида или на более низком уровне? ORM же получается медленней работает, нежели с курсором. Или спасает то, что в основном работа с базой идет на серверной стороне?
Как и сказал уже я по максимуму исопльзую cloud, на устройстве база в основном динамическая.
Динамическая это когда в ОЗУ данные загружаются с базы?