Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
dakeiras
автор
То есть вам досталась система на MongoDB, вы перенесли её на SQL базу... И в итоге получили убытки?

Простите, но мне видится, что проблема тут не в MongoDB.

Не перенесли а дуплицировали данные, OLAP.

Но проблема и правда не в монго, как я выше и написал. Проблема в том что не нужно было его использовать изначально.
Это объектная БД, она не приспособлена для 90% случаев работы например в банковоской сфере.

За банковскую сферу не скажу, потому как в ней не работал, хоть и были предложения.

И при этом беглое гугление говорит, что такие крупные финансовые конгломераты, как Citigroup Inc., вполне успешно используют MongoDB в автоматизации определённых процессов.

Сообщение было отредактировано: 1 июл 20, 18:01
1 июл 20, 18:02    [22160317]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
dakeiras
Member

Откуда:
Сообщений: 548
автор
Citigroup

Они и Кобол используют до сих пор. Это не говорит ни о чём.

Насчёт миграции - вот и ответ на ваш вопрос касательно "печальных результатов".
Лишние трудозатраты, потеря времени, как следствие убытки приумножаемые фактором срочности.

А всё потому что неправильные решения были приняты изначально.
1 июл 20, 18:09    [22160327]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
dakeiras
автор
Citigroup

Они и Кобол используют до сих пор. Это не говорит ни о чём.

Насчёт миграции - вот и ответ на ваш вопрос касательно "печальных результатов".
Лишние трудозатраты, потеря времени, как следствие убытки приумножаемые фактором срочности.

А всё потому что неправильные решения были приняты изначально.

Хорошо, тут мне нечего обсуждать, так как нет подробностей, да и нет никакого желания.

Вот только из этого не следует, что ТСу не подходит MongoDB.

Его задача:
miroooha
У меня есть два вида поиска игры - по названию (если игра есть в БД) и по ссылке. Парсер работает по ссылке. Ты ему ссылку, а он тебе готовый объект с информацией об игре. После каждого запроса по ссылке объект сохраняется в БД, чтобы в дальнейшем игру можно было искать по названию. При использовании парсера я не беру информацию из БД, я её туда только кладу. А при поиске по названию из БД только беру.
отлично ложится на MongoDB.

И очевидно, что вы слишком субъективны в этом вопросе.
1 июл 20, 18:15    [22160333]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
dakeiras
Member

Откуда:
Сообщений: 548
Дмитрий Мух
dakeiras
пропущено...

Они и Кобол используют до сих пор. Это не говорит ни о чём.

Насчёт миграции - вот и ответ на ваш вопрос касательно "печальных результатов".
Лишние трудозатраты, потеря времени, как следствие убытки приумножаемые фактором срочности.

А всё потому что неправильные решения были приняты изначально.

Хорошо, тут мне нечего обсуждать, так как нет подробностей, да и нет никакого желания.

Вот только из этого не следует, что ТСу не подходит MongoDB.

Его задача:
miroooha
У меня есть два вида поиска игры - по названию (если игра есть в БД) и по ссылке. Парсер работает по ссылке. Ты ему ссылку, а он тебе готовый объект с информацией об игре. После каждого запроса по ссылке объект сохраняется в БД, чтобы в дальнейшем игру можно было искать по названию. При использовании парсера я не беру информацию из БД, я её туда только кладу. А при поиске по названию из БД только беру.
отлично ложится на MongoDB.

И очевидно, что вы слишком субъективны в этом вопросе.

Он отказался от Postgresql потому что неправльно сделал что-то (хотя по умолчанию даже Постгрес работает в Хероку) и вместо того чтобы разобраться, полез в Mongodb.

А потом будет ходить по миру и распевать что SQL бд плохие для старпёров, а вот Mongodb для крутых молодых продвинутых эффективных.

Норм?
1 июл 20, 18:18    [22160335]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
dakeiras
Дмитрий Мух
пропущено...

Хорошо, тут мне нечего обсуждать, так как нет подробностей, да и нет никакого желания.

Вот только из этого не следует, что ТСу не подходит MongoDB.

Его задача:
пропущено...
отлично ложится на MongoDB.

И очевидно, что вы слишком субъективны в этом вопросе.

Он отказался от Postgresql потому что неправльно сделал что-то (хотя по умолчанию даже Постгрес работает в Хероку) и вместо того чтобы разобраться, полез в Mongodb.

А потом будет ходить по миру и распевать что SQL бд плохие для старпёров, а вот Mongodb для крутых молодых продвинутых эффективных.

Норм?

У вас явно слишком предвзятое отношение к MongoDB.

Да пусть себе ходит.
Это будет дюже забавно: написал простейший парсер для Google Play и теперь ходит по миру и распевает, что SQL БД плохие
1 июл 20, 18:25    [22160339]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
miroooha,

я вот тут подумал о том, что вы же действительно можете использовать в качестве _id не ObjectId, а строку
при чём ведь она уже есть в самой ссылке на Google Play: https://play.google.com/store/apps/details?id=com.n3twork.tetris

Вот же: com.n3twork.tetris.

Используйте этот id в своём парсере и тогда всё у вас заработает с MongoRepository.
1 июл 20, 18:29    [22160343]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
Делов-то:

import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "googleplaygames")
@Builder(builderClassName = "GooglePlayGameBuilder", toBuilder = true)
@AllArgsConstructor
@NoArgsConstructor
@Getter
@FieldDefaults(level = AccessLevel.PRIVATE)
public final class GooglePlayGame implements Serializable {
    @Id
    String id;
    @Indexed(unique = true)
    String title;
    String currentVersion
...
1 июл 20, 18:34    [22160347]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
miroooha
Member

Откуда:
Сообщений: 65
dakeiras

Он отказался от Postgresql потому что неправльно сделал что-то (хотя по умолчанию даже Постгрес работает в Хероку) и вместо того чтобы разобраться, полез в Mongodb.

А потом будет ходить по миру и распевать что SQL бд плохие для старпёров, а вот Mongodb для крутых молодых продвинутых эффективных.

Норм?

Как-то вы рассуждаете и за себя и за того парня. Да, в немалой степени я отказался от Postgres из-за того, что мне не удалось решить проблему подключений (в heroku их максимум 20). Пробовал Hikari Pool - стало лучше, но проблема глобально осталась.

Но изначально я хотел хранить объект в JSON-формате (или ему подобном), так как в моей первой версии приложении, результат парсера размещался как раз в JSON-файл. Но так как Dynos система heroku не поддерживает/не хранит файлы в принципе, моя библиотека обновлялась каждые 24ч при рестарте приложения. Поэтому я подумал о БД.

Mongo прекрасно, на мой взгляд, подходит для моих задач: облачный склад для моих документов (объектов с игрой).

Каждой БД найдется своё применение. А если вы я выбрал не Postgres а Oracle?

Я выбрал то, что мне подошло.

Ну столкнулся я и в Монго с трудностями, наверное, надо было попробовать Redis? Нет, я решил копать в Монго дальше, и что в этом плохого?

Во втором своем проекте я, скорее всего, буду использовать Postgres. Я уже учусь, развиваюсь. Не всё сразу.
2 июл 20, 12:43    [22160783]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
miroooha
Member

Откуда:
Сообщений: 65
Дмитрий Мух
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?
private String getAppId(String URL) throws URISyntaxException {
    URI uri = new URI(URL);
    Map<String, String> params = Arrays.stream(uri.getQuery().split("&"))
            .map(s -> s.split("="))
            .collect(Collectors.toMap(k -> k[0], v -> v.length > 1 ? v[1] : ""));
    return params.get("id");
}

Просто с помощью классов 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
2 июл 20, 12:55    [22160798]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
mayton
Member

Откуда: loopback
Сообщений: 47964
miroooha
dakeiras

Он отказался от Postgresql потому что неправльно сделал что-то (хотя по умолчанию даже Постгрес работает в Хероку) и вместо того чтобы разобраться, полез в Mongodb.

А потом будет ходить по миру и распевать что SQL бд плохие для старпёров, а вот Mongodb для крутых молодых продвинутых эффективных.

Норм?

Как-то вы рассуждаете и за себя и за того парня. Да, в немалой степени я отказался от Postgres из-за того, что мне не удалось решить проблему подключений (в heroku их максимум 20). Пробовал Hikari Pool - стало лучше, но проблема глобально осталась.

Мне кажется что ты до конца недоисследовал проблему. 20 физческих сеансов к БД - даже для нагруженных продуктовых
систем - это нормально. Надо только вовремя возвращать соединения в пул обратно и для 99% кейсов тебе их хватит с
головой. Исключение - это длинные транзакции и ETL. Но ETL у тебя нет ведь у тебя Монго. И длинных транзакций
у тебя тоже скорее всего нет. В монге обычно все корректировки документов - микро-атомарные транзакции.
Тоесть сведя задачу к Монге ты доказал что у тебя оно прекрасно и работало бы в Postgres просто ты где-то
не додавил проблему до конца. А надо было просто понаблюдать что эти 20 сеансов в пуле у тебя делают.
2 июл 20, 13:07    [22160819]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
miroooha
Дмитрий Мух
miroooha,

я вот тут подумал о том, что вы же действительно можете использовать в качестве _id не ObjectId, а строку
при чём ведь она уже есть в самой ссылке на Google Play: https://play.google.com/store/apps/details?id=com.n3twork.tetris

Вот же: com.n3twork.tetris.

Используйте этот id в своём парсере и тогда всё у вас заработает с MongoRepository.

Имя пакета приложения?
Имя? Параметр id - это имя? Не идентификатор? Серъёзно?

miroooha
Но говорят, что строку в качестве primary key (ведь id по сути и есть primary key) не стоит использовать?
А я говорю, что стоит. И могу ещё раз процитировать документацию.
2 июл 20, 13:10    [22160824]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
miroooha
Я попробовал и всё работает! :)

Кросавчег!
2 июл 20, 13:17    [22160843]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
mayton
Member

Откуда: loopback
Сообщений: 47964
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=" и потом цепочку символов до следующего "&".
Это же просто банально. Да может быть есть сторонние библиотеки. Но разве
тривиальное решение для тебя - неприемлемо?
2 июл 20, 13:22    [22160845]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
miroooha
Member

Откуда:
Сообщений: 65
Дмитрий Мух
miroooha
пропущено...

Имя пакета приложения?
Имя? Параметр id - это имя? Не идентификатор? Серъёзно?

miroooha
Но говорят, что строку в качестве primary key (ведь id по сути и есть primary key) не стоит использовать?
А я говорю, что стоит. И могу ещё раз процитировать документацию.

Да, этот параметр по сути является именем пакета приложения, и по идее он всегда уникален. Если разобрать .apk файл с игрой, его можно будет там найти. Знаю, так как ковырял .apk файлы по молодости.

Цитату в студию! :)
2 июл 20, 13:23    [22160847]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
miroooha
Дмитрий Мух
пропущено...
Имя? Параметр id - это имя? Не идентификатор? Серъёзно?

пропущено...
А я говорю, что стоит. И могу ещё раз процитировать документацию.

Да, этот параметр по сути является именем пакета приложения, и по идее он всегда уникален. Если разобрать .apk файл с игрой, его можно будет там найти. Знаю, так как ковырял .apk файлы по молодости.

Оу, ну не надо про .apk, мобильные приложения я писал, знаю что это такое :)

Хорошо, давайте так.

Имя пакета приложения на сайте Google Play является идентификатором этого самого приложения.
Поэтому вы спокойно можете его использовать у себя в базе как _id документа.
2 июл 20, 13:29    [22160853]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
miroooha
Member

Откуда:
Сообщений: 65
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=" и потом цепочку символов до следующего "&".
Это же просто банально. Да может быть есть сторонние библиотеки. Но разве
тривиальное решение для тебя - неприемлемо?

Я бы даже сказал слишком банально. Но меня всегда интересовали другие возможные решения. Я изначально пишу то, что приходит в голову, а потом улучшаю, если это необходимо и возможно.

Сообщение было отредактировано: 2 июл 20, 13:29
2 июл 20, 13:30    [22160854]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
miroooha
Цитату в студию! :)

The _id field may contain values of any BSON data type, other than an array.
2 июл 20, 13:30    [22160856]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
mayton
Member

Откуда: loopback
Сообщений: 47964
miroooha

Я бы даже сказал слишком банально. Но меня всегда интересовали другие возможные решения. Я изначально пишу то, что приходит в голову, а потом улучшаю, если это необходимо и возможно.

Ну тот солюшен на Stream-ах работает?
2 июл 20, 13:33    [22160859]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
miroooha
Member

Откуда:
Сообщений: 65
Дмитрий Мух

Имя пакета приложения на сайте Google Play является идентификатором этого самого приложения.

Утвердительно киваю головой. :)
mayton
miroooha

Я бы даже сказал слишком банально. Но меня всегда интересовали другие возможные решения. Я изначально пишу то, что приходит в голову, а потом улучшаю, если это необходимо и возможно.

Ну тот солюшен на Stream-ах работает?

Работает вери велл, наверное. По крайней мере, работает на том, что успел протестировать.
2 июл 20, 13:38    [22160872]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
dakeiras
Member

Откуда:
Сообщений: 548
автор
Пробовал Hikari Pool - стало лучше, но проблема глобально осталась
в Спринге и так Hikari используется по умолчанию. И он настроен по умолчанию на 5-10 коннектов если мне память не изменяет. Так что нормально он пашет с Хероку.
Скорее всего у тебя 2 приложения к 1 базе подключались.
2 июл 20, 13:44    [22160881]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
mayton
Member

Откуда: loopback
Сообщений: 47964
miroooha
Работает вери велл, наверное. По крайней мере, работает на том, что успел протестировать.

Ну и прекрасно. Пусть работает. Нагрузка на него - слабая. Сколько раз в секунду ты его дёрнешь?
Вряд-ли слишком много. Тебе надо больше качать и вставлять в свою монгу.

Это знаешь как старый двигатель в Москвич 2141. Пока он работает - пускай он грязный весь
в подтеках масла и закопченый. А как только ты решил его "перебрать" и промысть дескыть чтоб
лучше было - тут двигателю и капец. Надо будет заново ремонтировать.

Вобщем старый админски-девопский прицип. Да? Работает - и ладньенько.
2 июл 20, 13:56    [22160887]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
miroooha
Member

Откуда:
Сообщений: 65
mayton
miroooha
Работает вери велл, наверное. По крайней мере, работает на том, что успел протестировать.

Ну и прекрасно. Пусть работает. Нагрузка на него - слабая. Сколько раз в секунду ты его дёрнешь?
Вряд-ли слишком много. Тебе надо больше качать и вставлять в свою монгу.

Это знаешь как старый двигатель в Москвич 2141. Пока он работает - пускай он грязный весь
в подтеках масла и закопченый. А как только ты решил его "перебрать" и промысть дескыть чтоб
лучше было - тут двигателю и капец. Надо будет заново ремонтировать.

Вобщем старый админски-девопский прицип. Да? Работает - и ладньенько.

У меня тут как раз в деревне под окном Москвич 2140 1984 года стоит. Хоть сейчас заводи и езжай. :D Правда на большие расстояние рискованно, в любой момент может пернуть и загнуться.
2 июл 20, 14:38    [22160941]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
miroooha
Member

Откуда:
Сообщений: 65
Тут такое дело: давно думал, есть ли решение описанному ниже вопросу.

Google Play определяет страну, из которой подключается пользователь по IP-адресу (вроде как). При запуске с локальной машины парсер парсит информацию о стоимости игры в рублях - всё ок. При старте с heroku парсер уже подключается с европейского адреса, и вся страница отображается в соответствующей локали и с соответствующими ценами (евро).
Перевести содержимое страницы на русский смог с помощью простого костыля (суфикс &hl=ru к основному адресу), но на цену данный суффикс не влияет. Она конкретно привязана к соединению.

Можно ли как-то обмануть Google помимо использования прокси/VPN (работают через раз с Jsoup)?
Может в heroku есть какие-нибудь настройки?

Иль забить и смириться?
2 июл 20, 23:32    [22161298]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
Дмитрий Мух
Member

Откуда: Зеленоград
Сообщений: 3796
miroooha
Тут такое дело: давно думал, есть ли решение описанному ниже вопросу.

Google Play определяет страну, из которой подключается пользователь по IP-адресу (вроде как). При запуске с локальной машины парсер парсит информацию о стоимости игры в рублях - всё ок. При старте с heroku парсер уже подключается с европейского адреса, и вся страница отображается в соответствующей локали и с соответствующими ценами (евро).
Перевести содержимое страницы на русский смог с помощью простого костыля (суфикс &hl=ru к основному адресу), но на цену данный суффикс не влияет. Она конкретно привязана к соединению.

Можно ли как-то обмануть Google помимо использования прокси/VPN (работают через раз с Jsoup)?
Может в heroku есть какие-нибудь настройки?

Иль забить и смириться?

А проблема в чём?
3 июл 20, 00:24    [22161319]     Ответить | Цитировать Сообщить модератору
 Re: Поле объекта в качестве уникального ключа в документе MongoDB (Spring Data)  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 5373
miroooha,

Нужен юз кейс.
Например:
- юзверь германии встал с кровати
- нажал урл ffffffffff
- мой сервер ответил ыыыыыыы
...
3 июл 20, 07:27    [22161371]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 2 [3] 4   вперед  Ctrl      все
Все форумы / Java Ответить