Страница 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. опоздал :D

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
:-D
ну все все про меня знают, особо Слава

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, на устройстве база в основном динамическая.
Динамическая это когда в ОЗУ данные загружаются с базы?