RapidCodeLab
по скрину похоже на пуш уведомление, но это все что я смг понять, чет сленг адский)
ghett
это строение карточки в системе google material design
ghett
RapidCodeLab
не забудьте упомянуть стек технологий
ghett
я написал скрипт, который обращается пока просто к массиву массивов:
[
["Rich media","Primary title", "Supporting text", "Actions"]
["Rich media","Primary title", "Supporting text", "Actions"]
["Rich media","Primary title", "Supporting text", "Actions"]
["Rich media","Primary title", "Supporting text", "Actions"]
]
в итоге каждый подмассив содержит в себе набор данных для одной такой "карточки" как на картинке выше, карточки формируют ленту
ghett
стек технологий очень прост — чистый JS
RapidCodeLab
что такое чистый js ? клиентский чтоли ?
ghett
да
ghett
я не знаю. что будет дальше у меня, пока вообще просто переменная хранит массив массивов.
по идее оно где то будет храниться потом и пытаюсь понять — в каком виде лучше хранить
RapidCodeLab
если вы на клиенте, чет не пойму,какое вам дело до бэкенда и mongodb в частности
RapidCodeLab
отдавайте на бэкенд в json , бэкенд разберется как ему хранить
RapidCodeLab
и "массив массивов", имхо лучше говорить "многомерный массив" )
ghett
ну это единственный чат у меня в котором есть бекендеры
ghett
ghett
я и сам тешу себя мыслью всё делать самому, по миниуму хотя бы
RapidCodeLab
бэкендеры с удовольствием примут json объект, дальше пусть у вас голова не болит)
RapidCodeLab
protobuf былоб вообще идеал, но не в курсе как там на клиентах с этим
RapidCodeLab
ну понятно, у меня на go все норм с этим) тогда имхо json только
ghett
ясн, спасибо
RapidCodeLab
ghett
Stas
Stas
Stas
формат дата в монго
Stas
Stas
если в таком виде отправить дату, она прям отличненько в монго зайдёт
RapidCodeLab
хотя тут почти не обсуждается)
RapidCodeLab
но оно и понятно, проблем особо нет)
Stas
не знаю как там, но могут в разном формате прислать на бэк и потом думай как перекрутить
Stas
типа строкой с выдуманным форматом под себя
RapidCodeLab
в моем случае и фронт и бэк мой,)
yopp
Коллеги, всем привет!
Подскажите, как лучше решить такую ситуацию:
есть кластер (ReplicaSet из 3-х монг). В случае падения мастера, одна из реплик становится мастером. Как лучше реализовать проверку, чтобы, к примеру стоял балансировщик (haproxy), и всегда пробрасывал на мастер, а в случае фейла, проверял, кто сейчас стал мастером, и посылал запросы уже на него. Есть какое-либо встроенное решение, или придется юзать сторонние балансеры?
Failover встроенный, вам не нужно использовать сторонние инструменты.
yopp
Max
yopp
Я задам классический вопрос почему 20гб это проблема :)
yopp
Если это психологическая проблема, то вообще не стоит ничего делать. 20гб за 4 месяца это 60гб в год, это даже в Атласе будет ну может 300 баксов. Вряд ли вы даже перенос в другую колелекцию будет дешевле 300 долларов и даст какую-то экономию которая эти 300 долларов откупит.
yopp
Нажать кнопочку upgrade
Max
Max
И 200 iops ..
Max
Бдшкой делаю
yopp
Вы уже все делаете правильно. Заболело, проапгрейдились
yopp
Можно добавить проактивности, выбрав какие-то метрики которые отражают ваше представление о «подходит», посчитать на какие цифры на них алерты поставить, чтоб с запасом и нажимать upgrade до отказа)
yopp
yopp
Добавить ресурсов самый дешёвый способ. У вас копеечные объемы данных. Можете сами посчитать сколько часов у вас займёт «оптимизация», умножить на три и потом посчитать сколько денег может принести такая оптимизация и поделить на три. Практически уверен что ваша работа никогда не окупится.
yopp
Если у вас там есть какие-то отказы, связанные с деплоем новой версии, то посчитать убыток, умножить на частоту и понять например сколько это в деньгах в год стоит. Это будет ваш бюджет на починку. Если вы предполагаете что починить можно просто переложив куда-то данные, то переложите в отдельную коллекцию в монге.
Max
yopp
просто сок в том, что переложить их на S3 займёт не на много больше времени чем перенести в отдельную колекцию,,,
но это так, предположение)
Вам решать. Но я ещё раз рекомендую посчитать сначала убытки от проблем.
S3 это дополнительное хранилище, это добавит сложности как в приложении, так и в сопровождение. Как минимум будет головная боль с резервными копиями. Поиск по данными будет близко к невозможному, если вдруг понадобится.
Я за то чтоб выносить ненужные данные из хранилищ, но это должно быть обусловлено ценой.
А 20гб это масштаб еле дотягивающий даже до десятков долларов. Если вы нашли что у вас при запуске приложения требуется прочитать кучу документов, в которых хранятся эти массивы, то проще всего вынести эти данные в отдельную коллекцию.
Из отдельной коллекции потом в вынести в другое хранилище будет проще, так как данные уже будут разделены.
Max
Max
@dd_bb а не подскажешь как оптимальнее - балк инсёрт / апдейт - или апдейтить по одному документу?
yopp
Max
yopp
Что «?»
Max
Fess
Fess
Спасибо!
Max
народ, а монга умная? если у меня в матче 5 кондишенов на 5 разных полей, и только на один из них индекс - она начнёт с индекса кверить?
Sardor
yopp
yopp
yopp
Если сравнивать абстрактную эффективность в вакууме то в любом хранилище вставка будет более производительной чем обновление. Так как обновление требует сначала найти запись, потом выполнить с ней какие-то трансформации, а потом уже записать результат и обновить индексы. Вставка же сводится к записать данные и добавить новые ключи в индекс.
Max
yopp
Нет, не нужно
yopp
Потому что удаление это настолько дорогая операция, что многие хранилища просто помечают данные как удаленные, но не удаляют их.
yopp
Одно из простых решение это использование двух атрибутов: уникальный идентификатор данных и номер версии. И по этой паре создаётся составной индекс, в котором версия это постфикс и у неё порядок сортировки по убыванию. Связи между данными устанавливаются с использованием идентификатора данных, а не записи, а при выборке используется чуть более сложное условие, в котором выбирается только последняя версия.
yopp
Но ещё раз: это про абстрактных коней в гипотетическом вакууме.
Эффективности в отрыве от реальной проблемы не существует.