ну ок без сервера, просто база по какой то причине не доступна, банально повисла файловая система он же вернет null но почему не скажет. Да и если реально большой запрос повис - как его остановить, а как прогрес видеть.Foenix писал(а):але... с каким сервером?? мы таки щас о чем?altwin писал(а):Меня почему то контент провайдер сразу пугает тем,что не только нельзя отследить прогресс, но и остановить его нельзя. А как быть если нет соединения с сервером или ошибка авторизации, получается я могу вызвать его, но о этой ошибке мне никто не скажет, только проверка на null и вся информация... Как бы не очень интересная штука.
Правильный подход для управления базой данных
Re: Правильный подход для управления базой данных

Re: Правильный подход для управления базой данных
тут как я ни пыталась - ничего не понялаaltwin писал(а):курсор для выборки без формирования всего пула объектов, в том же фоновом потоке, существует колонка в которой в случае установки флага в true создается запись в лог, чтобы не дергать объект из разных мест одновременно тем более для простой задачи, я просто вытаскиваю курсором имя, штамп времени и остальное нужно, в любом случае соединение с базой я открываю один раз для создания объектов, далее это происходит без моего вмешательства, т.е. на все объекты получишвшие флаг true в стеке открывается соединение/забирается нужное/пишется, но процессом не связанным с основным и только одним.Foenix писал(а):стоп. а раньше ты про курсоры говорил. И где курсор у тебя используется?
И да, может я что то и не так делаю, но чтобы пройти циклом по базе мне как раз курсор нужен.
P.S. главный баг, который в данном случае для меня фича в том, что для cursor соединение никогда не закрывается, а вот флаг он считывает с объекта, но запись в базе не меняет, т.е. эта колонка в базе на сервере отличается от реальной ситуации в устройстве и до тех пока не будет вызван метод явного сохранения, все изминения статусов обратимы без обращения к серверу.
Ну и как бы я описывал изначально то, как стараюсь использовать базу и конкретный случай, это не значит, что я всегда использую все, что можно. Иногда просто быстрей взять курсор а не думать над логикой объектов.
вероятно у меня другие мысли. Я про локаль говорю вообще тут в теме. Сервер не трогаю.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Правильный подход для управления базой данных
тут не важно id это или что то еще, просто колонка в базе значения которой для строк увеличиваются по порядку. Я не говорил, что загрузить все объекты -это быстро и именно по этому ограничиваю число записей в базе на устройстве. Но это происодит один раз и полностью контролируемо. Зато если select для какой то строки не выполняется я явно отлавливаю этот момент и могу повторить/продолжить.Foenix писал(а):ох как сложно это все воспринимать, осоенно когда лексика не одинаковая!altwin писал(а):в смысле? поля базы передаются в конструктор, _id в данном случае используется в итерации, обычный инкремент позволяет пройти все по порядку, если целостость базы нарушенна и _id пропущенна - просто continue.Foenix писал(а):так не бывает. Что-то не то.циклом проходит по подготовленной таблице select -ом
P.S> как бы да id - по порядковому номеру, при необходимости можно использовать не id, а любое поле, просто в select ... where <_id>. Ничего не мешает конструктору принимать имя/пароль к дб, массив имен колонок, и поле по которому идет инкремент.
"пройти по порядку" что?
причем тут _id причем тут пропуски? эй
ох
если вот этоу тебя в цикле по _idselect ... where <_id>
если это действительно так, как ты пишешь, то это ой-ой-ой какой ужасно неправильный и катастрофически медленный способ, что я просто тут не знаю что сказать даже.

Re: Правильный подход для управления базой данных
использовать курсор можно и в цикле в этом суть, остальное не важно:Foenix писал(а):Я про локаль говорю вообще тут в теме. Сервер не трогаю.
[syntax=java5]
rawQuery("select * from todo where _id = ?", id );
[/syntax]
где id инкрементится, это не особо медленно, поскольку на те же 100 объектов времени практически не тратится. А больше я не создаю.
P.S. до меня кажется дошла суть вопроса. дело в том, что сервер отдает базу sqlite под этот запрос устройству. т.е. база не формируется а по сути копируется. Запрос в цикле очень простой, потому как эта таблица - результат обработки таблиц на сервере. Т.е. на устрйстве лежит база в которой грубо говоря сложенно поле для инкремента, имя, дата, контент, фото и подобная мелочь, которые исопльзутся далее, никаких связей тут нет, ничего служебного, база отдана именно для этого select, запрос очень простой именно потому что никаких фильтров нет.
Не знаю, как это объяснить.. приложение по сути не работает с базой вообще, все данные идут в виде rest на сервер в базу ничего не пишется по сути и принимается большая часть через rest api, база используется в данном сулчае для listview и обычно я так и делаю для мелких задач в UI. Это обычное key / value хранилище, просто реляционное

Re: Правильный подход для управления базой данных
понимаешь.. мы тут пытаемся писать проекты как портфолио, и там буквально все - каждый алгоритм, каждый метод, каждая буква в наименовании переменной должна быть аутентичной - отвечающей определенным стандартам etc. Чтобы не было мучительно стыдно показать свой код.
С этой точки зрения мой код, который я применяла раньше - можно было бы назвать "грязным" с точки зрения даже ооп или именований объектов, но у меня не было настолько далеких от правильности алгоритмов))
Так вот с этой точки зрения данный "велосипед" .. я даже не знаю - это настолько далеко от аутентичного кода..
Я не осуждаю ничуть, тут каждый сам знает зачем пишет и для чего.. просто с точки зрения баз данных - это совсем совсем не то. Такое делают раз в жизни - в самом первом проекте, потом читают, изучают, меняют подход на правильный и больше никогда к нему не возвращаются.
Опять же - общение с сервернуой частью я не беру, т.к. я в этом вопросе не разбиралась.
С этой точки зрения мой код, который я применяла раньше - можно было бы назвать "грязным" с точки зрения даже ооп или именований объектов, но у меня не было настолько далеких от правильности алгоритмов))
Так вот с этой точки зрения данный "велосипед" .. я даже не знаю - это настолько далеко от аутентичного кода..
Я не осуждаю ничуть, тут каждый сам знает зачем пишет и для чего.. просто с точки зрения баз данных - это совсем совсем не то. Такое делают раз в жизни - в самом первом проекте, потом читают, изучают, меняют подход на правильный и больше никогда к нему не возвращаются.
Опять же - общение с сервернуой частью я не беру, т.к. я в этом вопросе не разбиралась.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Правильный подход для управления базой данных
т.е. есть вещи, которые нужно делать изначально с правильным подходом - не важно сколькоу тебя записей в таблице 100 или 100 тыс. На то и программист, чтоб предусматривать то, что завтра их будет сколько угодно и все должно работать.. Подход "а, у меня все равно тут всего 100 записей" - не для меня. Однажды кто-то где-то чего-то не поймет, не допишет, не определит.. ничего не должно валиться и не работать или работать медленней чем это могло бы быть..
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Правильный подход для управления базой данных
Вообще почитав, что я тут понаписал, сам не особо понял.. суть простая - это частный случай. Для меня важно хранение строк из базы в объекте еще и потому, что его адрес используется как один из ключей шифрования и сохраняется в keystore устройства, получить запись другим способом нельзя, как и востановить не возможно. Если отработал метод update адреса объектов и ключи меняются и операция должна быть не обратимой. Это гарантирует то, что действия сделанные пользователем уникальны для утсройства. На сервер пойдут только явно либо не пойдут вообще. И прочитать их не возможно однажды закрыв. Ключ не читается. Можно только отдать серверу вместе с ключем, ключ удаляется. Т.е. любую операцию можно сделать один раз, просмотреть, изменить, даже открыть повторно невозможно не только выполнив update но и банально начав новое действие. Тут вопрос не в скорости а в большом количестве уникальных данных, которые формируются в конечный 4 мб. ключ на сервере. А там уже опять таки прочитать нельзя - можно получить результат обработки важной информации из кучи мусора собранной из группы устройств.. как то так.
P.S. как бы да передомной стоит задача писать не читаемый код, я и не пытаюсь следовать патернам и более того завязываю его на себя.. Собственно и заплатили последний раз за поддержку мне больше именно потому, что другие не разобрались.
P.S. как бы да передомной стоит задача писать не читаемый код, я и не пытаюсь следовать патернам и более того завязываю его на себя.. Собственно и заплатили последний раз за поддержку мне больше именно потому, что другие не разобрались.

Re: Правильный подход для управления базой данных
Не совсем корректно у меня не всего 100 записей, я сознательно ограничил устройство на получение 100 записей, это не 100 записей в базу по сути - это файл sqlite который никогда не получит более 100 записей. Ну и как бы я для того и делаю, чтобы кто то а лчше никто ничего не понялFoenix писал(а):Подход "а, у меня все равно тут всего 100 записей" - не для меня. Однажды кто-то где-то чего-то не поймет, не допишет, не определит.. ничего не должно валиться и не работать или работать медленней чем это могло бы быть..

Re: Правильный подход для управления базой данных
Чисто гипотетически представим что у моего приложения 1'500'000 активных юзеров + втрое больше с iOS, не считая веб клиент.Foenix писал(а):это все, что я говорила интересного???anber писал(а):интересная мысль.Foenix писал(а): лучше заставить работать сервер и вычислятЬ, чем устройство - это и дураку понятно![]()
![]()
![]()
Причем у подавляющего большинства Samsung S4, HTC one и прочая 4-ех ядерная хренотень, и ты в серъез считаешь что нужно перекладывать вычисления с клиентов на сервер?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Правильный подход для управления базой данных
Какие вычисление можно сделать на устройстве? Ну а вообще другого пути нет. Или google/facebook что то считает в телефоне? реализовать логику для iOS/Android/Server/Desktop - это сколько ж человек надо?anber писал(а):Чисто гипотетически представим что у моего приложения 1'500'000 активных юзеров + втрое больше с iOS, не считая веб клиент.Foenix писал(а):это все, что я говорила интересного???anber писал(а):интересная мысль.Foenix писал(а): лучше заставить работать сервер и вычислятЬ, чем устройство - это и дураку понятно![]()
![]()
![]()
Причем у подавляющего большинства Samsung S4, HTC one и прочая 4-ех ядерная хренотень, и ты в серъез считаешь что нужно перекладывать вычисления с клиентов на сервер?

Re: Правильный подход для управления базой данных
я не хочу подвергать сомнению важность хранения в объектах и так далее.. это уже не касается бд как таковой...altwin писал(а):Не совсем корректно у меня не всего 100 записей, я сознательно ограничил устройство на получение 100 записей, это не 100 записей в базу по сути - это файл sqlite который никогда не получит более 100 записей. Ну и как бы я для того и делаю, чтобы кто то а лчше никто ничего не понялFoenix писал(а):Подход "а, у меня все равно тут всего 100 записей" - не для меня. Однажды кто-то где-то чего-то не поймет, не допишет, не определит.. ничего не должно валиться и не работать или работать медленней чем это могло бы быть..Я не стремлюсь использовать открытый код в своем проекте и более того не хочу, чтобы мой код использовали. Опять же тут довольно спецефичная задача. Да и я лишь винтик выполняющий довольно абстрактную задачу и пытающийся защититься максимально.
я говорила только о локальной бд и аутентичном подходе (скорее всего я бы сказала "рекомендуемый гуглом подход") и вроде бы твоей цели - стать программистом)
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Правильный подход для управления базой данных
ну начались какие то странные обобщения!anber писал(а):Чисто гипотетически представим что у моего приложения 1'500'000 активных юзеров + втрое больше с iOS, не считая веб клиент.Foenix писал(а):это все, что я говорила интересного???anber писал(а):интересная мысль.Foenix писал(а): лучше заставить работать сервер и вычислятЬ, чем устройство - это и дураку понятно![]()
![]()
![]()
Причем у подавляющего большинства Samsung S4, HTC one и прочая 4-ех ядерная хренотень, и ты в серъез считаешь что нужно перекладывать вычисления с клиентов на сервер?
если я храню что-то на сервере и мне нужно юзать те данные, то да, нужно имхо вначале вычислить там же, потом передавать клиенту и показывать. Ясный пень. Я тут имела ввиду распространенную задачу - сервер с серьезной субд, куча данных и прочее.
Но если я храню что-то на телефоне, я не стану передавать это на сервер, чтоб там сложить 2+2. С этим андроид справится.
или что?
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Правильный подход для управления базой данных
полтора миллиона юзеров, ну и что, .. да хоть два миллиарда. На то и сервера, чтоб это все обрабатывать. ФБ уже привели в пример.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Правильный подход для управления базой данных
я им уже стал в принципе, учусь -да третий год, но второй год работаю, как python developer, Android -только потому, что стало интересно ну и как бы бы начинал с C, потому Objective -C и iOS, прикармливает "фрилансера"... Android -пока не отдался окончательно. Я совсем не уверен, что google рекомендует этот подход для решения задач не станартных/описанных в документации, в данном случае решение пока не встречается и не описанно, все, что вижу - написанный код для других платформ и использую их подход, google ведь не умеет шифровать данные в своем диске? В моей задаче это лишь малая часть, которая давно работает.Foenix писал(а):я не хочу подвергать сомнению важность хранения в объектах и так далее.. это уже не касается бд как таковой...altwin писал(а):Не совсем корректно у меня не всего 100 записей, я сознательно ограничил устройство на получение 100 записей, это не 100 записей в базу по сути - это файл sqlite который никогда не получит более 100 записей. Ну и как бы я для того и делаю, чтобы кто то а лчше никто ничего не понялFoenix писал(а):Подход "а, у меня все равно тут всего 100 записей" - не для меня. Однажды кто-то где-то чего-то не поймет, не допишет, не определит.. ничего не должно валиться и не работать или работать медленней чем это могло бы быть..Я не стремлюсь использовать открытый код в своем проекте и более того не хочу, чтобы мой код использовали. Опять же тут довольно спецефичная задача. Да и я лишь винтик выполняющий довольно абстрактную задачу и пытающийся защититься максимально.
я говорила только о локальной бд и аутентичном подходе (скорее всего я бы сказала "рекомендуемый гуглом подход") и вроде бы твоей цели - стать программистом)
Опять же, мне удобно то, что есть 100% контроль поведения объектов, возможно будут проблемы с тем, что я создаю сразу все, но в том то и суть - это не все. Просто я не совсем понимаю java и работать с объектом мне проще на данном этапе. Я не против ругих варриантов, просто мне придется менять логику, на это нет времени... а контролировать в каком месте памяти хранить объект не дает java, вот и имеем то, что имеем

Re: Правильный подход для управления базой данных
Реализовать логику чего?altwin писал(а):Какие вычисление можно сделать на устройстве? Ну а вообще другого пути нет. Или google/facebook что то считает в телефоне? реализовать логику для iOS/Android/Server/Desktop - это сколько ж человек надо?
Что касается ФБ то у них дата центры по 750'000'000$ штука, а тут халявный миллион девайсов на который можно переложить вычисления.Foenix писал(а):полтора миллиона юзеров, ну и что, .. да хоть два миллиарда. На то и сервера, чтоб это все обрабатывать. ФБ уже привели в пример.
UPD. А вообще можете мои реплике в этом треде игнорировать, у вас тут своя атмосфера
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Правильный подход для управления базой данных
m090050 писал(а):Кстати, была ли необходимость работать с базой с двух процессов?
anber писал(а):имеется в виду в разных приложения, которые работают с одной базой?
Тот метод который я предложил позволяет безопасно работать с базой из нескольких потоков. См. http://stackoverflow.com/a/3689883/1159507 и http://touchlabblog.tumblr.com/post/244 ... connectionm090050 писал(а):в одном
Тот же автор пишет "ContentProvdier is just a lot of overhead and not needed unless you're sharing data outside of your app". http://stackoverflow.com/a/9794146/1159507
Кстати нашел что-нибудь интересное по данной теме?
Личные сообщения с просьбой ответить на форуме или написать программу я просто удаляю, если я в хорошем настроении. Если в плохом добавляю автора в черный список. По любым другим вопросам feel free to write to me.
Re: Правильный подход для управления базой данных
Андрей, мнение " "ContentProvdier is just a lot of overhead and not needed unless you're sharing data outside of your app"" устарело.
Я это на вебинаре говорила и говорила почему. Эта цитата даже на сайте гугла сохранилась, хотя в другом месте они пишут уже другие вещи.
Я это на вебинаре говорила и говорила почему. Эта цитата даже на сайте гугла сохранилась, хотя в другом месте они пишут уже другие вещи.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Правильный подход для управления базой данных
http://habrahabr.ru/post/143431/
вот еще довольно старая ссылк ана статью об ORMlite в андроид. Я ее рассматривала, когда выбирала подход. Комментарии автора внизу говорят, что он запросто признает эффективность лоадеров и контент-провайдера.. ну а раз человек в этом разбирающийся так говорит, я ему поверила, дальше с этим подходом возиться не стала как с бесперспективным..
Так же судя по статье, там сложнова-то было бы осуществить, если вообще возможно, те запросы к б.д. что мне нужны были.
вот еще довольно старая ссылк ана статью об ORMlite в андроид. Я ее рассматривала, когда выбирала подход. Комментарии автора внизу говорят, что он запросто признает эффективность лоадеров и контент-провайдера.. ну а раз человек в этом разбирающийся так говорит, я ему поверила, дальше с этим подходом возиться не стала как с бесперспективным..
Так же судя по статье, там сложнова-то было бы осуществить, если вообще возможно, те запросы к б.д. что мне нужны были.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Правильный подход для управления базой данных
Кто упорно не хочет смотреть вебинар, вот быстро найденная ссылка.
http://stackoverflow.com/questions/1109 ... gingcursor
где объясняется одна из причин в комментариях, с коими я совершенно согласна, т.к. сама сделала точно такой же вывод после месяца мучений.
т.е. чтобы не использовать устаревший метод нужно юзать CursorLoader-ы, а они почти бессмысленны, если их не использовать в соединении с контент-провайдерами, т.к. если использовать их отдельно самая "вкусная" их часть, там где автоматически идет обновление результатов запроса при изменении в бд (о которых как раз сообщает контент-провайдер) работать не будет и тянет за собой другие "велосипеды".
Проще согласиться с гуглом и юзать контент-провайдеры, курсор-лоадеры и другие лоадеры и не париться.
http://stackoverflow.com/questions/1109 ... gingcursor
где объясняется одна из причин в комментариях, с коими я совершенно согласна, т.к. сама сделала точно такой же вывод после месяца мучений.
they are really wanting people to adopt ContentProviders
Код: Выделить всё
You could write your own CursorLoader that works with Cursors and not ContentProviders and make it a reusable class so that you can use the Loader framework without using ContentProviders.Проще согласиться с гуглом и юзать контент-провайдеры, курсор-лоадеры и другие лоадеры и не париться.
R.id.team
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198
Re: Правильный подход для управления базой данных
Опять я не понял... мне не нужно автообновление результатов запроса. Я повсместно использую MVC, не смотря на то, что кто то утверждал, как будто я не принимаю подходы рекомендуемые google, просто подходы есть разные. Я хочу контролировать модель и именно потому держу в памяти объекты. При изменении базы, наступает событие, которое опять таки заставляет отработать модель, я действительно вообще не могу понять в чем конкретно проблема? Что именно я делаю не так и где тут проблема? Как бы да, подход применим при определенном стиле программирования, но никак не повсеместно.Foenix писал(а):Кто упорно не хочет смотреть вебинар, вот быстро найденная ссылка.
http://stackoverflow.com/questions/1109 ... gingcursor
где объясняется одна из причин в комментариях, с коими я совершенно согласна, т.к. сама сделала точно такой же вывод после месяца мучений.they are really wanting people to adopt ContentProvidersт.е. чтобы не использовать устаревший метод нужно юзать CursorLoader-ы, а они почти бессмысленны, если их не использовать в соединении с контент-провайдерами, т.к. если использовать их отдельно самая "вкусная" их часть, там где автоматически идет обновление результатов запроса при изменении в бд (о которых как раз сообщает контент-провайдер) работать не будет и тянет за собой другие "велосипеды".Код: Выделить всё
You could write your own CursorLoader that works with Cursors and not ContentProviders and make it a reusable class so that you can use the Loader framework without using ContentProviders.
Проще согласиться с гуглом и юзать контент-провайдеры, курсор-лоадеры и другие лоадеры и не париться.
P.S. может проблема в том, что не часто использую базу для хранения именно контента? И "Загрузчик контента" мне в принципе не нужен вообще? Этот класс не соответсвует требованиям вообще, он не контролируем, его нельзя остановить, нельзя отследить состояние. зачем он мне я вообще не понимаю...
