|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Подключил к своему проекту MongoDB (Mongo Cloud) и складываю туда объекты в виде документов. Репозиторий для общения с БД: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Сам объект, который сохраняю: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Если сохранять объект в таком виде, в коллекции MongoDB поле title заменяется на _id , а title просто становится null и никак не отображается в коллекции, так как если пробую добавить ещё одну игру, вылетает exception: Код: java 1.
Если убрать аннотацию @Id, то в коллекции будут храниться дубликаты и будет две одинаковых игры, у которых отличается поле "номер версии". Мне игра нужна в единственном экземпляре: если у игры, например, изменился номер версии, я хочу перезаписать этот объект (если он уже есть в БД) с новой версией. Пробовал с помощью аннотации @Indexed(unique = true) на поле. В таком случае другие игры добавляются, но если я пробую перезаписать старый объект с таким же полем, то также получаю DuplicateKey. Для сохранения в БД использую метод save. Как быть? Писать ручками запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2020, 15:58 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 07:39 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp miroooha, https://www.google.com/search?newwindow=1&client=tablet-android-huawei&ei=NHD5Xs3kBcHIrgTTwYDgDw&q=mongo cloud id primary key&oq=Mongo Cloud id primary&gs_lcp=ChNtb2JpbGUtZ3dzLXdpei1zZXJwEAEYADIFCCEQoAE6BAgAEEc6BAgAEAo6AggAOggIABAWEAoQHjoICCEQFhAdEB46BQgAEM0COgcIIRAKEKABUJ8xWM6zAWD9wgFoA3ABeACAAaIKiAHFJpIBDzAuMi41LjIuMC4xLjEuMZgBAKABAQ&sclient=mobile-gws-wiz-serp ? Primary Key - это и есть аннотация @Id у меня в примере. И с ней не работает. Он смотрит, что я добавляю объект с таким же полем и тут же DuplicationError, не смотря на то, что другие поля уже отличаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 12:31 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
В доках написано, что метод save работает как insert, если такого документа нет, и как update, если документ уже есть. Но кто-то меня обманывает, либо что-то недоговаривает. Никакого update у меня не происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 12:32 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, Значит ссылку где обманывают сюда. И код тоже сюда. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 12:58 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, Там в веб в примере id строковый тип? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 13:02 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp miroooha, Значит ссылку где обманывают сюда. И код тоже сюда. https://www.concretepage.com/spring-5/spring-data-mongorepository-update#save В подобных примерах в основном числовой тип, а не строковый. У меня же строка. Да и этот метод save() наследуется от CrudRepository. И опять же, пишут, что он работает и как update, например тут: https://www.baeldung.com/spring-data-crud-repository-save ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 13:20 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, >В подобных примерах в основном числовой тип, а не строковый. У меня же строка. Вот и сделай числовой. И потом с примером сюда. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 14:11 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp miroooha, >В подобных примерах в основном числовой тип, а не строковый. У меня же строка. Вот и сделай числовой. И потом с примером сюда. А нафига мне числовой то? Если у меня поиск по названию игры. На кой черт мне вообще это число? :D Ввести доп.переменную числового типа и пометить её как primary key? Я попробую, но выглядит абсурдно. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 21:02 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha А нафига мне числовой то? Если у меня поиск по названию игры. На кой черт мне вообще это число? :D Ввести доп.переменную числового типа и пометить её как primary key? Я попробую, но выглядит абсурдно ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:16 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha А нафига мне числовой то? Если у меня поиск по названию игры. На кой черт мне вообще это число? :D Ввести доп.переменную числового типа и пометить её как primary key? Я попробую, но выглядит абсурдно ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:16 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
вадя miroooha А нафига мне числовой то? Если у меня поиск по названию игры. На кой черт мне вообще это число? :D Ввести доп.переменную числового типа и пометить её как primary key? Я попробую, но выглядит абсурдно Оно обязательно должно быть числом? У меня есть primary key, который весит на стринге. Мне предлагают снять этот primary key с этой стринги, ввести доп.поле числового типа и повесить на него pk. Ну я буду пробовать, потом отпишусь о результатах. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2020, 22:29 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Оно обязательно должно быть числом? кроме этого поле primary key делают автоинкриментным ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 07:24 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, Долго пробуешь. Заработает, поставишь строковое. Делов то. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 07:42 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Обычно title не выбирают на роль уникального ключа. По смыслу - он больше атрибут. Или комментарий. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 08:33 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
вадя miroooha Оно обязательно должно быть числом? кроме этого поле primary key делают автоинкриментным Ну это понятно, что сравнить два числа гораздо быстрее, чем строку. Попробовал так: Вручную ввел доп.поле типа ObjectId, которое генерит сама монго, если не видит аннотации @Id. Повесил на неё @Id, а на название повесил индекс на уникальность. Проверил: взял объект из БД, через сеттер изменил одно из полей и попробовал сохранить измененный объект - всё прошло успешно. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Окей, объект изменился, никаких дубликат error. Однако, дальше через свой парсер снова пытаюсь сохранить объект (у которого это измененное поле уже другое) - и снова ничего не работает! Чудеса да и только. Если брать объект из БД, менять через сеттер ему поле, и сохранять обратно - то всё работает. А как только пытаюсь сохранить готовый объект (у которого новое значение в поле) - так снова DuplicateKey. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 13:48 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, Второй нерабочий случай не понял. Транзакция должна быть короткой 0,1сек. С коммитом. Поле id менять нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 13:52 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp miroooha, Второй нерабочий случай не понял. Транзакция должна быть короткой 0,1сек. С коммитом. Поле id менять нельзя. Ну в первом случае я взял объект с игрой из БД, сохранил его в локальную переменную, через сеттер изменил значение одного поля и тут же через метод save() сохранил в БД. В результате у этого объекта в БД изменилось соответствующее поле - т.е. то, чего я и добивался. Про второй случай. У меня же есть парсер, который по ссылке достаёт всю информацию об игре, которую я потом сохраняю в БД. Я знаю, что у меня в БД сейчас лежит объект, у которого тот же самый title, что и у игры, которую я парсю. Но одно поле у объекта, который лежит в БД и объекта, который я получил в ходе парсинга - разные. Т.е. по идее всё должно сработать как и в первом сценарии - перезаписаться одно поле. Но здесь получаю DuplicateKey. P.S. Т.е. если я в будущем захочу обновить игру в БД по одной ссылке и 1 запросу с парсера, если у неё условно сменится номер, или цена, то я получу ошибку. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 13:59 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Грубо говоря, он не хочет просто взять и "переписать" старый объект на новый, у которого новые значения. Надо взять уже имеющийся объект и БД, изменить ему поля и закинуть его обратно. Не очень удобно для моего сценария. Особенности NoSQL? Mongo? Или моих кривых рук? С Postgres всё работало по описанному сценарию. Я уже понимаю, что похоже загвоздка в id, так как при парсинге создаётся новый объект. Он видит, что у объектов разные id, но одинаковые поля title и не пускает. Но как её решить.. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 14:03 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
При каждом запросе залезать в БД и проверять, есть ли там такая игра. Если есть, то достать и сравнить с той, что выдал парсер. Прогнать и сравнить через equals, и в случае несовпадения заменить через сеттер соответствующие поля и обновить объект в БД. Как-то не комильфо. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 14:14 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha При каждом запросе залезать в БД и проверять, есть ли там такая игра. Если есть, то достать и сравнить с той, что выдал парсер. Прогнать и сравнить через equals, и в случае несовпадения заменить через сеттер соответствующие поля и обновить объект в БД. Как-то не комильфо. Ещё один костыль, который только что испробовал: при попытке сохранить объект в БД ловить этот exception на дубликат. В catch блоке во временную переменную складывать объект из БД с таким же названием. Доставать у него этот уникальный id, и через сеттер ставить тому объекту, который пытаюсь сохранить. В результате объект в БД обновляется. Но как-то мне не очень нравится такой вариант (но хоть работает) :D ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 14:29 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Посмотреть, чем "объект из БД" отличается от того, что ты пытаешься пихать, не судьба? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 14:52 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Посмотреть, чем "объект из БД" отличается от того, что ты пытаешься пихать, не судьба? Я это только что выше в принципе и описал. Просто завернул в catch, чтобы проверять что там нового только в том случае, если такой объект уже есть (при DuplicateKeyExсeption). Проверять каждый нет необходимости. Просто при работе с Postgres таких проблем не было, он сам всё решал за меня. А здесь вот так вот выходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 14:57 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha При каждом запросе залезать в БД и проверять, есть ли там такая игра. Если есть, то достать и сравнить с той, что выдал парсер. Прогнать и сравнить через equals, и в случае несовпадения заменить через сеттер соответствующие поля и обновить объект в БД. Как-то не комильфо. Вы много думаете. При ОРМ не надо жалеть комп и много думать. Именно так! Читаем ПОСЛЕДНЮЮ версию объекта и меняем за 0, 00001 сек. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 15:39 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, Я не понял что за парсер такой? Все работы с бд должны быть через одни ворота. Например hibernate. Если jdbc, то аккуратно и отдельный проект. Что за парсер? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 15:42 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Если за 0,0001 сек встретились 3 кода сохранения то этот случай надо читать в доках. В хибере настраивается перетирать старое или вызвать райзе или... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 15:45 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
PetroNotC Sharp miroooha, Я не понял что за парсер такой? Все работы с бд должны быть через одни ворота. Например hibernate. Если jdbc, то аккуратно и отдельный проект. Что за парсер? Да обыкновенный парсер веб-странички. У меня есть два вида поиска игры - по названию (если игра есть в БД) и по ссылке. Парсер работает по ссылке. Ты ему ссылку, а он тебе готовый объект с информацией об игре. После каждого запроса по ссылке объект сохраняется в БД, чтобы в дальнейшем игру можно было искать по названию. При использовании парсера я не беру информацию из БД, я её туда только кладу. А при поиске по названию из БД только беру. И вот возникает такая ситуация, что игра может быть уже в библиотеке (со старыми данными), и приходит запрос по ссылке (через парсер), и пытается сохранить (обновить) эту новую информацию в БД. Здесь у меня и был конфликт. Вот и приходится теперь сверять объекты. Точнее я теперь при возникновении этого исключения достаю из БД игру с таким же названием, беру у него этот уникальный id, через сеттер назначаю этот же самый айди объекту с новой информацией и отправляю в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 16:46 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, ОК. Все верно ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 17:28 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, а покажи туловище парсера. Что у тебя там? JSoup? HtmlCleaner? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 17:31 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
MongoDB не нужно использовать практически никогда. Это всё от нежелания учить SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 18:12 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Возможно суммарная стоимость владения Монгой (если покупать ее как сервис у Амазона или Ажура) будет дешевле чем Postgres. Тогда пожалуй смысл есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 20:17 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
mayton miroooha, а покажи туловище парсера. Что у тебя там? JSoup? HtmlCleaner? Простейший парсер на jsoup: https://github.com/vonoriMMM/parser/blob/master/src/main/java/parser/googleplay/GooglePlayGamesParser.java Даже safe-методы написал во избежание NPE. Но его все равно придется переписывать (какую-то часть), как только структура страницы изменится. Была идея писать с помощью Selenium, но почему-то отказался, уж сам не помню из-за чего. dakeiras MongoDB не нужно использовать практически никогда. Это всё от нежелания учить SQL. Довольно спорное заявление, но я отказался от Postgres из-за того, что при деплоее на heroku там проблемы с подключением были. Мне также говорили, зачем я пишу бота на Java, когда есть Python? mayton Возможно суммарная стоимость владения Монгой (если покупать ее как сервис у Амазона или Ажура) будет дешевле чем Postgres. Тогда пожалуй смысл есть. Монго даёт БД (кластер) бесплатную (Mongo Cloud) с объемом в 512 МБ и 500 подключений. Причем можно выбирать хост: Google/AWS/Azure. Для моих нужд более чем. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 20:36 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, что-то у вас много слов и мало кода никогда не испытывал проблем с upsert в MongoDB покажите код сохранения и почитайте документацию, тогда станет понятно, откуда берётся поле _id : The _id FieldIn MongoDB, each document stored in a collection requires a unique _id field that acts as a primary key. If an inserted document omits the _id field, the MongoDB driver automatically generates an ObjectId for the _id field. This also applies to documents inserted through update operations with upsert: true. The _id field has the following behavior and constraints:
отдельно обращу ваше внимание на последней строке в цитате: The _id field may contain values of any BSON data type, other than an array . ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 20:57 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Про второй случай. У меня же есть парсер, который по ссылке достаёт всю информацию об игре, которую я потом сохраняю в БД. Я знаю, что у меня в БД сейчас лежит объект, у которого тот же самый title, что и у игры, которую я парсю. Но одно поле у объекта, который лежит в БД и объекта, который я получил в ходе парсинга - разные. Т.е. по идее всё должно сработать как и в первом сценарии - перезаписаться одно поле. Но здесь получаю DuplicateKey. Значит в итоге вы делаете insert вместо update. Если надо обновить одно поле в документе с соответствующим title , то выполните update с нужным set : https://docs.mongodb.com/manual/reference/operator/update/set/ ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 21:06 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Дмитрий Мух miroooha, что-то у вас много слов и мало кода никогда не испытывал проблем с upsert в MongoDB покажите код сохранения и почитайте документацию, тогда станет понятно, откуда берётся поле _id : The _id FieldIn MongoDB, each document stored in a collection requires a unique _id field that acts as a primary key. If an inserted document omits the _id field, the MongoDB driver automatically generates an ObjectId for the _id field. This also applies to documents inserted through update operations with upsert: true. The _id field has the following behavior and constraints:
отдельно обращу ваше внимание на последней строке в цитате: The _id field may contain values of any BSON data type, other than an array . Там почти нет кода. Используется готовый метод save() из MongoRepository. Я просто получаю объект из парсера и делаю на нём .save(). Я не писал реализацию для репозитория (интерфейса), используется дефолтная, так как думал, что для моих нужд этого будет достаточно, но возможно всё-таки придется, опыта набираться нужно. Id у меня сейчас типа ObjectId, который относится к BSON типу, если я не ошибаюсь. Проблема в обновлении в том, что там может быть такой сценарий, при котором надо обновлять не одно поле, а 10. Проще новый объект на место старого вставить? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 21:42 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Код есть, но как я уже сказал он предельно прост: Сам документ: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Репа: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
Сохранение в БД (с подменой Id, описанной выше): Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Знаю, что некрасиво (мне самому не нравится), но пока так. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2020, 21:49 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Там почти нет кода. Используется готовый метод save() из MongoRepository. Я просто получаю объект из парсера и делаю на нём .save(). Я не писал реализацию для репозитория (интерфейса), используется дефолтная, так как думал, что для моих нужд этого будет достаточно, но возможно всё-таки придется, опыта набираться нужно. В том числе и изменить документ с таким-то title . Причём как весь объект, так и только часть полей. Все операции описаны в документации (например update ) и доступны через драйвер. MongoRepository - это обёртка над драйвером MongoDB. Предположу, что метод .save() работает исключительно по ключу (_id). И когда последний есть, то выполняется update , а когда нет, как при получении объекта из парсера, то insert . Отсюда вы и получаете DuplicateKey exception , потому как пытаетесь вставить новый документ, нарушающий уникальность индекса по полю title . Вам нужно выполнить update не по ключу, а по условию title равно что-то там. Посмотрите, если соответсвующий метод в вашем MongoRepository, возможно есть перегрузка метода .save(), принимающая не только документ, или аннотация какая. Если же нет, то придётся написать свою реализацию репозитория, или использовать драйвер напрямую. Вообщем читайте документацию как по MongoDB, так и по тем библиотекам, что используете для работы с ней. miroooha Id у меня сейчас типа ObjectId, который относится к BSON типу, если я не ошибаюсь. Среди которых и String , что также можно использовать в качестве значения _id . miroooha Проблема в обновлении в том, что там может быть такой сценарий, при котором надо обновлять не одно поле, а 10. Проще новый объект на место старого вставить? И при этом действительно проще новый объект на место старого вставить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 14:38 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Сохранение в БД (с подменой Id, описанной выше): Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Знаю, что некрасиво (мне самому не нравится), но пока так. Да уж, вот вам ссылки на документацию по драйверу для Java: http://mongodb.github.io/mongo-java-driver/4.0/apidocs/mongodb-driver-sync/index.html http://mongodb.github.io/mongo-java-driver/4.0/apidocs/mongodb-driver-sync/com/mongodb/client/MongoCollection.html ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 14:46 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
авторДовольно спорное заявление, но я отказался от Postgres из-за того, что при деплоее на heroku там проблемы с подключением были. Мне также говорили, зачем я пишу бота на Java, когда есть Python? Там на хероку всё автоматом подключается в Postgresql. А спорить не надо. Я знаю о чём говорю и это подтверждено опытом. Mongodb приводит к очень плачевным результатам. Хотя не так. Нежелание учиться и лень приводят к очень плачевным результатам. Python говно хуже явы. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 16:58 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
dakeiras Mongodb приводит к очень плачевным результатам. Интересно к каким? 6 лет как у нас MongoDB вполне успешно используется в продакшене. Да, надо знать как оно устроено и как с ним работать. А если что-то не уметь готовить, тогда да, результаты будут плачевные, в том числе и с Postgres. Который мы кстати тоже вполне успешно используем в продакшене :) ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:12 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Дмитрий Мух , спасибо за разъяснения! Покопаюсь в документации. Пока посмотрел метод save MongoRepository. С дефолтной реализацией он работает так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Вызывается или insert, если такой entity нет, либо save класса MongoTemplate. Ну а там уже реализация посложнее, сходу не разобрался. Единственное, в этом методе save активно мелькает id. Код: java 1.
А в saveDocument такое дело: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Дальше лезть ёщё страшнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:21 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Дмитрий Мух dakeiras Mongodb приводит к очень плачевным результатам. Интересно к каким? 6 лет как у нас MongoDB вполне успешно используется в продакшене. Да, надо знать как оно устроено и как с ним работать. А если что-то не уметь готовить, тогда да, результаты будут плачевные, в том числе и с Postgres. Который мы кстати тоже вполне успешно используем в продакшене :) я получил систему завязанную на монго, где он был не к месту. А как и в 90% случаев к месту была бы SQL база. Пришлось к ней писать доп. систему с человеческой SQL базой. Это спасло от многомилионных убытков. (Но не надолго как показала практика). ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:28 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
авторДа, надо знать как оно устроено и как с ним работать. кстати, как в этом монго сделать так чтобы большой объект файл с записями 100мб можно было сохранять? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:30 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Дмитрий Мух , спасибо за разъяснения! Покопаюсь в документации. Пока посмотрел метод save MongoRepository. С дефолтной реализацией он работает так: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Вызывается или insert, если такой entity нет, либо save класса MongoTemplate. Ну а там уже реализация посложнее, сходу не разобрался. Единственное, в этом методе save активно мелькает id. Код: java 1.
А в saveDocument такое дело: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Дальше лезть ёщё страшнее. Ну видно же, что если isNew(entity), то insert. Если нет id, то тоже insert. Что и требовалось доказать Отсюда и DuplicateKey exception по title. Вам по идее вместо mapped.getIdFilter() нужен некий mapped.getTitleFilter(), тогда выполнив: Код: java 1.
вы получите то, что вам нужно: нет документа с таким title, он добавится; есть - обновится. На writeConcern не обращайте внимание, оно вам не надо. Разве что можете в документации почитать, что это такое и когда следует использовать: https://docs.mongodb.com/manual/reference/write-concern/ ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:33 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
dakeiras авторДа, надо знать как оно устроено и как с ним работать. кстати, как в этом монго сделать так чтобы большой объект файл с записями 100мб можно было сохранять? Как как... GridFS is a specification for storing and retrieving files that exceed the BSON-document size limit of 16 MB. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:35 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
dakeiras Дмитрий Мух пропущено... Интересно к каким? 6 лет как у нас MongoDB вполне успешно используется в продакшене. Да, надо знать как оно устроено и как с ним работать. А если что-то не уметь готовить, тогда да, результаты будут плачевные, в том числе и с Postgres. Который мы кстати тоже вполне успешно используем в продакшене :) я получил систему завязанную на монго, где он был не к месту. А как и в 90% случаев к месту была бы SQL база. Пришлось к ней писать доп. систему с человеческой SQL базой. Это спасло от многомилионных убытков. (Но не надолго как показала практика). То есть вам досталась система на MongoDB, вы перенесли её на SQL базу... И в итоге получили убытки? Простите, но мне видится, что проблема тут не в MongoDB. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:38 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Дмитрий Мух dakeiras пропущено... кстати, как в этом монго сделать так чтобы большой объект файл с записями 100мб можно было сохранять? Как как... GridFS is a specification for storing and retrieving files that exceed the BSON-document size limit of 16 MB. я это видел. Как существующую базу\приложение на это мигрировать? авторТо есть вам досталась система на MongoDB, вы перенесли её на SQL базу... И в итоге получили убытки? Простите, но мне видится, что проблема тут не в MongoDB. Не перенесли а дуплицировали данные, OLAP. Но проблема и правда не в монго, как я выше и написал. Проблема в том что не нужно было его использовать изначально. Это объектная БД, она не приспособлена для 90% случаев работы например в банковоской сфере. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:44 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
dakeiras Дмитрий Мух пропущено... Как как... GridFS is a specification for storing and retrieving files that exceed the BSON-document size limit of 16 MB. я это видел. Как существующую базу\приложение на это мигрировать? Тут я вам сходу не скажу, я же не видел вашу базу\приложение. Вопрос из разряда: как мигрировать приложение, что хранит файлы на сетевой шаре в Amazon S3. Зависит от того, как это самое приложение спроектировано и реализовано. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:50 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Мне кажется что количество "миграторов" в нашем мире пропорционально количеству систем в квадрате. А квадрат - это нехорошее число. Растет слишком резко. Не угонимся за всеми. Тогда вместо того чтобы гуглить или ждать специфичный мигратор, можно взять ... и написать свой. Я не думаю что это сложно. На мой взгляд - курсовая для 2 курса факультета ПО. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:55 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
mayton Я не думаю что это сложно. На мой взгляд - курсовая для 2 курса факультета ПО. Мне вот тоже кажется, что это не сложно, если приложение хорошо спроектировано. Если же там некий SmartUI монолит, это уже вопрос ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 17:58 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
dakeiras авторТо есть вам досталась система на MongoDB, вы перенесли её на SQL базу... И в итоге получили убытки? Простите, но мне видится, что проблема тут не в MongoDB. Не перенесли а дуплицировали данные, OLAP. Но проблема и правда не в монго, как я выше и написал. Проблема в том что не нужно было его использовать изначально. Это объектная БД, она не приспособлена для 90% случаев работы например в банковоской сфере. За банковскую сферу не скажу, потому как в ней не работал, хоть и были предложения. И при этом беглое гугление говорит, что такие крупные финансовые конгломераты, как Citigroup Inc., вполне успешно используют MongoDB в автоматизации определённых процессов. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 18:02 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
авторCitigroup Они и Кобол используют до сих пор. Это не говорит ни о чём. Насчёт миграции - вот и ответ на ваш вопрос касательно "печальных результатов". Лишние трудозатраты, потеря времени, как следствие убытки приумножаемые фактором срочности. А всё потому что неправильные решения были приняты изначально. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 18:09 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
dakeiras авторCitigroup Они и Кобол используют до сих пор. Это не говорит ни о чём. Насчёт миграции - вот и ответ на ваш вопрос касательно "печальных результатов". Лишние трудозатраты, потеря времени, как следствие убытки приумножаемые фактором срочности. А всё потому что неправильные решения были приняты изначально. Хорошо, тут мне нечего обсуждать, так как нет подробностей, да и нет никакого желания. Вот только из этого не следует, что ТСу не подходит MongoDB. Его задача: miroooha У меня есть два вида поиска игры - по названию (если игра есть в БД) и по ссылке. Парсер работает по ссылке. Ты ему ссылку, а он тебе готовый объект с информацией об игре. После каждого запроса по ссылке объект сохраняется в БД, чтобы в дальнейшем игру можно было искать по названию. При использовании парсера я не беру информацию из БД, я её туда только кладу. А при поиске по названию из БД только беру. И очевидно, что вы слишком субъективны в этом вопросе. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 18:15 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Дмитрий Мух dakeiras пропущено... Они и Кобол используют до сих пор. Это не говорит ни о чём. Насчёт миграции - вот и ответ на ваш вопрос касательно "печальных результатов". Лишние трудозатраты, потеря времени, как следствие убытки приумножаемые фактором срочности. А всё потому что неправильные решения были приняты изначально. Хорошо, тут мне нечего обсуждать, так как нет подробностей, да и нет никакого желания. Вот только из этого не следует, что ТСу не подходит MongoDB. Его задача: miroooha У меня есть два вида поиска игры - по названию (если игра есть в БД) и по ссылке. Парсер работает по ссылке. Ты ему ссылку, а он тебе готовый объект с информацией об игре. После каждого запроса по ссылке объект сохраняется в БД, чтобы в дальнейшем игру можно было искать по названию. При использовании парсера я не беру информацию из БД, я её туда только кладу. А при поиске по названию из БД только беру. И очевидно, что вы слишком субъективны в этом вопросе. Он отказался от Postgresql потому что неправльно сделал что-то (хотя по умолчанию даже Постгрес работает в Хероку) и вместо того чтобы разобраться, полез в Mongodb. А потом будет ходить по миру и распевать что SQL бд плохие для старпёров, а вот Mongodb для крутых молодых продвинутых эффективных. Норм? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 18:18 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
dakeiras Дмитрий Мух пропущено... Хорошо, тут мне нечего обсуждать, так как нет подробностей, да и нет никакого желания. Вот только из этого не следует, что ТСу не подходит MongoDB. Его задача: пропущено... отлично ложится на MongoDB. И очевидно, что вы слишком субъективны в этом вопросе. Он отказался от Postgresql потому что неправльно сделал что-то (хотя по умолчанию даже Постгрес работает в Хероку) и вместо того чтобы разобраться, полез в Mongodb. А потом будет ходить по миру и распевать что SQL бд плохие для старпёров, а вот Mongodb для крутых молодых продвинутых эффективных. Норм? У вас явно слишком предвзятое отношение к MongoDB. Да пусть себе ходит. Это будет дюже забавно: написал простейший парсер для Google Play и теперь ходит по миру и распевает, что SQL БД плохие ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 18:25 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, я вот тут подумал о том, что вы же действительно можете использовать в качестве _id не ObjectId, а строку при чём ведь она уже есть в самой ссылке на Google Play: https://play.google.com/store/apps/details?id=com.n3twork.tetris Вот же: com.n3twork.tetris . Используйте этот id в своём парсере и тогда всё у вас заработает с MongoRepository. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 18:29 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Делов-то: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.07.2020, 18:34 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
dakeiras Он отказался от Postgresql потому что неправльно сделал что-то (хотя по умолчанию даже Постгрес работает в Хероку) и вместо того чтобы разобраться, полез в Mongodb. А потом будет ходить по миру и распевать что SQL бд плохие для старпёров, а вот Mongodb для крутых молодых продвинутых эффективных. Норм? Как-то вы рассуждаете и за себя и за того парня. Да, в немалой степени я отказался от Postgres из-за того, что мне не удалось решить проблему подключений (в heroku их максимум 20). Пробовал Hikari Pool - стало лучше, но проблема глобально осталась. Но изначально я хотел хранить объект в JSON-формате (или ему подобном), так как в моей первой версии приложении, результат парсера размещался как раз в JSON-файл. Но так как Dynos система heroku не поддерживает/не хранит файлы в принципе, моя библиотека обновлялась каждые 24ч при рестарте приложения. Поэтому я подумал о БД. Mongo прекрасно, на мой взгляд, подходит для моих задач: облачный склад для моих документов (объектов с игрой). Каждой БД найдется своё применение. А если вы я выбрал не Postgres а Oracle? Я выбрал то, что мне подошло. Ну столкнулся я и в Монго с трудностями, наверное, надо было попробовать Redis? Нет, я решил копать в Монго дальше, и что в этом плохого? Во втором своем проекте я, скорее всего, буду использовать Postgres. Я уже учусь, развиваюсь. Не всё сразу. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 12:43 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Дмитрий Мух miroooha, я вот тут подумал о том, что вы же действительно можете использовать в качестве _id не ObjectId, а строку при чём ведь она уже есть в самой ссылке на Google Play: https://play.google.com/store/apps/details?id=com.n3twork.tetris Вот же: com.n3twork.tetris . Используйте этот id в своём парсере и тогда всё у вас заработает с MongoRepository. Имя пакета приложения? Но говорят, что строку в качестве primary key (ведь id по сути и есть primary key) не стоит использовать? Я попробовал и всё работает! :) Как можно по-другому достать значение параметра id из URL? Код: java 1. 2. 3. 4. 5. 6. 7.
Просто с помощью классов URI/URL не получилось. Может есть готовые решения в сторонних библиотеках? Ссылка может быть как такой: https://play.google.com/store/apps/details?id=com.playdigious.deadcells.mobile&hl=en Так и: https://play.google.com/store/apps/details?id=com.playdigious.deadcells.mobile ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 12:55 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha dakeiras Он отказался от Postgresql потому что неправльно сделал что-то (хотя по умолчанию даже Постгрес работает в Хероку) и вместо того чтобы разобраться, полез в Mongodb. А потом будет ходить по миру и распевать что SQL бд плохие для старпёров, а вот Mongodb для крутых молодых продвинутых эффективных. Норм? Как-то вы рассуждаете и за себя и за того парня. Да, в немалой степени я отказался от Postgres из-за того, что мне не удалось решить проблему подключений (в heroku их максимум 20). Пробовал Hikari Pool - стало лучше, но проблема глобально осталась. Мне кажется что ты до конца недоисследовал проблему. 20 физческих сеансов к БД - даже для нагруженных продуктовых систем - это нормально. Надо только вовремя возвращать соединения в пул обратно и для 99% кейсов тебе их хватит с головой. Исключение - это длинные транзакции и ETL. Но ETL у тебя нет ведь у тебя Монго. И длинных транзакций у тебя тоже скорее всего нет. В монге обычно все корректировки документов - микро-атомарные транзакции. Тоесть сведя задачу к Монге ты доказал что у тебя оно прекрасно и работало бы в Postgres просто ты где-то не додавил проблему до конца. А надо было просто понаблюдать что эти 20 сеансов в пуле у тебя делают. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:07 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Дмитрий Мух miroooha, я вот тут подумал о том, что вы же действительно можете использовать в качестве _id не ObjectId, а строку при чём ведь она уже есть в самой ссылке на Google Play: https://play.google.com/store/apps/details?id=com.n3twork.tetris Вот же: com.n3twork.tetris . Используйте этот id в своём парсере и тогда всё у вас заработает с MongoRepository. Имя пакета приложения? miroooha Но говорят, что строку в качестве primary key (ведь id по сути и есть primary key) не стоит использовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:10 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Я попробовал и всё работает! :) Кросавчег! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:17 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Просто с помощью классов URI/URL не получилось. Может есть готовые решения в сторонних библиотеках? Ссылка может быть как такой: https://play.google.com/store/apps/details?id=com.playdigious.deadcells.mobile&hl=en Так и: https://play.google.com/store/apps/details?id=com.playdigious.deadcells.mobile Ну тебе надо в строке найти "id=" и потом цепочку символов до следующего "&". Это же просто банально. Да может быть есть сторонние библиотеки. Но разве тривиальное решение для тебя - неприемлемо? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:22 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Дмитрий Мух miroooha пропущено... Имя пакета приложения? miroooha Но говорят, что строку в качестве primary key (ведь id по сути и есть primary key) не стоит использовать? Да, этот параметр по сути является именем пакета приложения, и по идее он всегда уникален. Если разобрать .apk файл с игрой, его можно будет там найти. Знаю, так как ковырял .apk файлы по молодости. Цитату в студию! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:23 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Дмитрий Мух пропущено... Имя? Параметр id - это имя? Не идентификатор? Серъёзно? пропущено... А я говорю, что стоит. И могу ещё раз процитировать документацию. Да, этот параметр по сути является именем пакета приложения, и по идее он всегда уникален. Если разобрать .apk файл с игрой, его можно будет там найти. Знаю, так как ковырял .apk файлы по молодости. Оу, ну не надо про .apk, мобильные приложения я писал, знаю что это такое :) Хорошо, давайте так. Имя пакета приложения на сайте Google Play является идентификатором этого самого приложения. Поэтому вы спокойно можете его использовать у себя в базе как _id документа. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:29 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
mayton miroooha пропущено... Как-то вы рассуждаете и за себя и за того парня. Да, в немалой степени я отказался от Postgres из-за того, что мне не удалось решить проблему подключений (в heroku их максимум 20). Пробовал Hikari Pool - стало лучше, но проблема глобально осталась. Мне кажется что ты до конца недоисследовал проблему. 20 физческих сеансов к БД - даже для нагруженных продуктовых систем - это нормально. Надо только вовремя возвращать соединения в пул обратно и для 99% кейсов тебе их хватит с головой. Исключение - это длинные транзакции и ETL. Но ETL у тебя нет ведь у тебя Монго. И длинных транзакций у тебя тоже скорее всего нет. В монге обычно все корректировки документов - микро-атомарные транзакции. Тоесть сведя задачу к Монге ты доказал что у тебя оно прекрасно и работало бы в Postgres просто ты где-то не додавил проблему до конца. А надо было просто понаблюдать что эти 20 сеансов в пуле у тебя делают. Не отрицаю, что не до конца разобрался. Но нашел альтернативную рабочую версию, стоит ли мешки ворочать? Я обязательно попробую решить эту проблему и разобраться, но уже на другом проекте (или на этом же, но на другой ветке). Записал себе в блокнотик. mayton miroooha Просто с помощью классов URI/URL не получилось. Может есть готовые решения в сторонних библиотеках? Ссылка может быть как такой: https://play.google.com/store/apps/details?id=com.playdigious.deadcells.mobile&hl=en Так и: https://play.google.com/store/apps/details?id=com.playdigious.deadcells.mobile Ну тебе надо в строке найти "id=" и потом цепочку символов до следующего "&". Это же просто банально. Да может быть есть сторонние библиотеки. Но разве тривиальное решение для тебя - неприемлемо? Я бы даже сказал слишком банально. Но меня всегда интересовали другие возможные решения. Я изначально пишу то, что приходит в голову, а потом улучшаю, если это необходимо и возможно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:30 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Цитату в студию! :) The _id field may contain values of any BSON data type , other than an array. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:30 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Я бы даже сказал слишком банально. Но меня всегда интересовали другие возможные решения. Я изначально пишу то, что приходит в голову, а потом улучшаю, если это необходимо и возможно. Ну тот солюшен на Stream-ах работает? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:33 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Дмитрий Мух Имя пакета приложения на сайте Google Play является идентификатором этого самого приложения. Утвердительно киваю головой. :) mayton miroooha Я бы даже сказал слишком банально. Но меня всегда интересовали другие возможные решения. Я изначально пишу то, что приходит в голову, а потом улучшаю, если это необходимо и возможно. Ну тот солюшен на Stream-ах работает? Работает вери велл, наверное. По крайней мере, работает на том, что успел протестировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:38 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
авторПробовал Hikari Pool - стало лучше, но проблема глобально осталасьв Спринге и так Hikari используется по умолчанию. И он настроен по умолчанию на 5-10 коннектов если мне память не изменяет. Так что нормально он пашет с Хероку. Скорее всего у тебя 2 приложения к 1 базе подключались. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:44 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Работает вери велл, наверное. По крайней мере, работает на том, что успел протестировать. Ну и прекрасно. Пусть работает. Нагрузка на него - слабая. Сколько раз в секунду ты его дёрнешь? Вряд-ли слишком много. Тебе надо больше качать и вставлять в свою монгу. Это знаешь как старый двигатель в Москвич 2141. Пока он работает - пускай он грязный весь в подтеках масла и закопченый. А как только ты решил его "перебрать" и промысть дескыть чтоб лучше было - тут двигателю и капец. Надо будет заново ремонтировать. Вобщем старый админски-девопский прицип. Да? Работает - и ладньенько. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 13:56 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
mayton miroooha Работает вери велл, наверное. По крайней мере, работает на том, что успел протестировать. Ну и прекрасно. Пусть работает. Нагрузка на него - слабая. Сколько раз в секунду ты его дёрнешь? Вряд-ли слишком много. Тебе надо больше качать и вставлять в свою монгу. Это знаешь как старый двигатель в Москвич 2141. Пока он работает - пускай он грязный весь в подтеках масла и закопченый. А как только ты решил его "перебрать" и промысть дескыть чтоб лучше было - тут двигателю и капец. Надо будет заново ремонтировать. Вобщем старый админски-девопский прицип. Да? Работает - и ладньенько. У меня тут как раз в деревне под окном Москвич 2140 1984 года стоит. Хоть сейчас заводи и езжай. :D Правда на большие расстояние рискованно, в любой момент может пернуть и загнуться. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 14:38 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Тут такое дело: давно думал, есть ли решение описанному ниже вопросу. Google Play определяет страну, из которой подключается пользователь по IP-адресу (вроде как). При запуске с локальной машины парсер парсит информацию о стоимости игры в рублях - всё ок. При старте с heroku парсер уже подключается с европейского адреса, и вся страница отображается в соответствующей локали и с соответствующими ценами (евро). Перевести содержимое страницы на русский смог с помощью простого костыля (суфикс &hl=ru к основному адресу), но на цену данный суффикс не влияет. Она конкретно привязана к соединению. Можно ли как-то обмануть Google помимо использования прокси/VPN (работают через раз с Jsoup)? Может в heroku есть какие-нибудь настройки? Иль забить и смириться? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2020, 23:32 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Тут такое дело: давно думал, есть ли решение описанному ниже вопросу. Google Play определяет страну, из которой подключается пользователь по IP-адресу (вроде как). При запуске с локальной машины парсер парсит информацию о стоимости игры в рублях - всё ок. При старте с heroku парсер уже подключается с европейского адреса, и вся страница отображается в соответствующей локали и с соответствующими ценами (евро). Перевести содержимое страницы на русский смог с помощью простого костыля (суфикс &hl=ru к основному адресу), но на цену данный суффикс не влияет. Она конкретно привязана к соединению. Можно ли как-то обмануть Google помимо использования прокси/VPN (работают через раз с Jsoup)? Может в heroku есть какие-нибудь настройки? Иль забить и смириться? А проблема в чём? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2020, 00:24 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, Нужен юз кейс. Например: - юзверь германии встал с кровати - нажал урл ffffffffff - мой сервер ответил ыыыыыыы ... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2020, 07:27 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha, Можешь подключаться через прокси сервера той страны, диапазон ip которых тебе выгоден с точки зрения логики Гугла. Но прокси медлительны и ненадёжны. Требуют надзора и обновления настроек. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2020, 08:58 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
Дмитрий Мух А проблема в чём? Дык я бота же сделал, который конечно скорее всего никого не заинтересует (изначально делал его по дружескому заказу для группы, но он уже не нужен, насколько я понял), и условно нацелен он был на русскоговорящую аудиторию. Хотя его функционал в определенных случаях может быть удобен (для тех, кто не пользуется Google Play и не покупает там игры). Решил доделать и оставить себе в качестве проекта для будущего резюме. В итоге всё взаимодействие и информация на кириллице, а цена выходит в евро. Гуд? Не гуд. Терпимо? Пожалуй. mayton miroooha, Можешь подключаться через прокси сервера той страны, диапазон ip которых тебе выгоден с точки зрения логики Гугла. Но прокси медлительны и ненадёжны. Требуют надзора и обновления настроек. Да, в их медлительности и ненадежности я уже убедился. Это первое, что я попробовал и вышло не ахти. Либо забить болт и переписать всё под англоговорящую аудиторию и оставить евро/доллары. Не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2020, 12:31 |
|
Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)
|
|||
---|---|---|---|
#18+
miroooha Дмитрий Мух А проблема в чём? Дык я бота же сделал, который конечно скорее всего никого не заинтересует (изначально делал его по дружескому заказу для группы, но он уже не нужен, насколько я понял), и условно нацелен он был на русскоговорящую аудиторию. Хотя его функционал в определенных случаях может быть удобен (для тех, кто не пользуется Google Play и не покупает там игры). Решил доделать и оставить себе в качестве проекта для будущего резюме. В итоге всё взаимодействие и информация на кириллице, а цена выходит в евро. Гуд? Не гуд. Терпимо? Пожалуй. mayton miroooha, Можешь подключаться через прокси сервера той страны, диапазон ip которых тебе выгоден с точки зрения логики Гугла. Но прокси медлительны и ненадёжны. Требуют надзора и обновления настроек. Да, в их медлительности и ненадежности я уже убедился. Это первое, что я попробовал и вышло не ахти. Либо забить болт и переписать всё под англоговорящую аудиторию и оставить евро/доллары. Не знаю. Читай документацию на тот Google API который ты используешь. Там должно быть описание региональных особенностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2020, 12:33 |
|
|
start [/forum/topic.php?all=1&fid=59&tid=2120753]: |
0ms |
get settings: |
11ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
42ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
1248ms |
get tp. blocked users: |
1ms |
others: | 283ms |
total: | 1599ms |
0 / 0 |