@gogolang

Страница 832 из 1630
andrew
17.02.2018
14:48:44
а можно по подробнее про тулинг?

Никита
17.02.2018
14:49:15
Может вопрос не по теме, но есть ли у кого то статья или видео обьясняющее разницу между разного рода Базами Данных? Типа чем реляцонные хуже/лучше графовых, в чем преимущества и недостатки, и т.п.

Pawel
17.02.2018
14:54:15
вообще почему советуют такого рода БД? Каковы преимущества?
если коротко - преимуществ овердофига для графовых и древовидных в частности структур данных

Google
Никита
17.02.2018
14:54:51
Конкретный пример можно?

В какой ситуации

Pawel
17.02.2018
15:05:13
Конкретный пример можно?
Деревьев очень много в предметных областях, но работая с реляционными СУБД их стараются избегать, так как работа с ними вызывает много боли. Оптимизация обхода графа для SSD накопителей вообще нечеловеческими усилиями достигается (если это вообще возможно). Статей на эту тему написано - море. Графовые БД всё это более или менее решают

именно так и есть

а можно по подробнее про тулинг?
я использую универсальный JetBrains-плагин для всех БД в goland-е, но можно взять софтину, на подобие этой http://sqlitebrowser.org/

tsov
17.02.2018
16:00:20
разница в том, что нужно добиться в конкретной задаче - скорости, экономии ресурсов, сложных выборок, отказоустойчивости

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

когда данных очень много, их накладно все держать inmemory (раньше так было)

хотя современные тенденции (sap hana) возвращают нас обратно к kv in memory, за счет наращивания оперативной памяти на серверах

Vladimir
17.02.2018
16:18:42
когда данных очень много, их накладно все держать inmemory (раньше так было)
так сейчас ничего принципиально не изменилось. Есть задачи где можно держать in-memory, есть задачи где нельзя (ну то есть конечно можно, но десятки терабайт памяти не завезли еще).

Google
The
17.02.2018
17:03:04
И там и тут вижу одних и тех же людей. Уже по чуть-чуть начинаю путать эти чаты.

Pawel
17.02.2018
17:03:18
разница в том, что нужно добиться в конкретной задаче - скорости, экономии ресурсов, сложных выборок, отказоустойчивости
Не-а. Любую SQL БД можно без напрягов использовать в качестве kv storage, а вот обратное утверждение не верно. А разница именно в ACID. Который в распределённых SQL БД достигается такими ужасными вещами, как шардинг и репликация. Которые в принципе невозможно сделать нормально, без усложнения системы на 1-2 порядка. В nosql ни о каком acid речи не идёт, все гарантии в пределах одного ключа или документа. Поэтому распределённые хранилища nosql не сложнее локальных. Вот для этого nosql и нужен - это ественный выбор для распред. БД без транзакций.

А вот это вот всё про производительность и in-memory в контексте SQL vs NoSQL - оно абсолютно ни о чём, потому что тут всё зависит от конкретной схемы данных, а не от СУБД.

Code
17.02.2018
17:11:03


The
17.02.2018
17:11:56
в данном случае - нету смысла. по крайней мере я не вижу его, может на низком уровне это как-то влияет

аргументы в горутины нужно в цикле передавать

и ещё, вместо time.Sleep, посмотрите про sync.WaitGroup.

им легко пользоваться. Сначала делается wg := &sync.WaitGroup{}, затем перед вызовом горутины wg.Add(1) go func() { defer wg.Done() // ваш код

и в конце wg.Wait()

Pawel
17.02.2018
17:14:36
очень странный пример и не менее странный вопрос. "передавать переменные внутрь горутины через аргументы функции" - это что вообще?

Никита
17.02.2018
17:14:51
Такой вопрос. Есть хэндлер запросов API, есть группы вызовов(users, records, ...). Каждый вызов возвращает ответ через функцию normalResponse (OK) или errorResponse (not OK). Количество строк растет, ориентироваться все сложнее и сложнее. Думал разбить хэндлер на части по группам а потом их импорировать в одном файле. Но тогда проблема с функциями возврата ответа - от них зависят все вызовы, что с ними делать? тоже выносить в отдельный файл и импортировать в каждый файл группы вызовов?

Никита
17.02.2018
17:18:53
Конкретнее показать не могу сейчас

The
17.02.2018
17:24:51
Конкретнее показать не могу сейчас
Мне сходу не понятны ваши хендлеры, я сейчас пилю подобный веб-проект, и кажется тоже столкнулся с такой-же проблемой. у меня есть пакет status, где есть всякие status.NotFound(), status.InternalError() и прочее. Я просто его импортирую, и в зависимости от того, вернула ли мне модель sql.ErrNoRows, или что-то вроде этого, вызываю хендлер и делаю return. Но честно говоря, решение идиотическое и я думаю как от него уйти. Пока думаю сделать имплементацию ServeMux, но пока не придумал как это мне поможет, все нету времени набросать тестовый проект с несколькими моделями. Ещё можно глянуть в сторону context.Context, он хоть и подходит больше для контроля горутин, но и структурировать все это дело позволяет.

The
17.02.2018
17:28:58
Проблема в том, что везде тонны бойлерплейта вроде if err != nil { if err == sql.ErrNoRows { status.NotFound(w) return } else { // Тут либо err превращать в какой-то HTTPError, со своим status, а в хендлерах делать if err != nil { handlerError(HttpError) return } Либо Mux имплементировать, и через ServeHTTP и контексты разруливать. Но не уверен, что там по финалу выйдет лучше.

ну и дробить, дробить, дробить.. делать экшены, выносить из хендлеров логику, и т.д.

Google
Pawel
17.02.2018
17:32:58
А можно немного поподробнее рассказать? Какими усложнениями?
шардинг и репликация - это сложно, что тут ещё сказать. В nosql можно жить без этого ценой потери acid, вот и все подробности

Pawel
17.02.2018
17:48:22
А чем сложно?
на настройку и тестирование нод требуется на много больше инженеро-часов, чем на связывание нод для монги. Ну и для обеспечения требований по latency может потребоваться принять много нетривиальных решений и компромисов. В nosql всё это проще clickhouse не использовал, но по отзывам коллег она очень гут. ну и она колоночная, это не тоже самое что постгрес горизонтально масштабировать (я чисто теоретически говорю) acid - атомарность, согласованность, изолированность, устойчивость

Code
17.02.2018
17:52:15
очень странный пример и не менее странный вопрос. "передавать переменные внутрь горутины через аргументы функции" - это что вообще?
Хорошо, немного перефразирую. Глобальные переменные в горутине это плохо? В моем примере signals является глобальной, если производить какие-либо тяжелые операции это не скажется на работе программы? Или горутине пофигу как я туда передам переменную?

Pawel
17.02.2018
17:53:46
горутине естественно пофигу, вам - нет. глобальные переменные - это в любом случае зло в читом виде безотносительно к горутинам.

Pawel
17.02.2018
18:47:51
А в чем отличие того как масштабировать горизонтально?
Более простые схемы шардинга. По отзывам сисадминов прописать конфиг-сервера для разделения данных монги и постгреса - это две большие разницы (я не занимался). Плюс для монги более простая конфигурация нод сама по себе, поскольку на сопоставимых объёмах данных нагрузка на сситему с монгой в целом меньше по понятным причинам

Denis
17.02.2018
18:54:46
Товарищи, а когда не правильно имплементировал интерфейс, есть тулзы проверить что не так?

Pawel
17.02.2018
18:57:00
@theiced я правильно понимаю, что если сделать более сложную конфигурацию нод в монге, то она станет как постгрес?
да ну, с чего бы. Если монга будет обеспечивать мультидокументные транзакции - вот тогда станет

Vladimir
17.02.2018
18:58:10
да ну, с чего бы. Если монга будет обеспечивать мультидокументные транзакции - вот тогда станет
http://markets.businessinsider.com/news/stocks/MongoDB-Announces-Multi-Document-ACID-Transactions-in-Release-4-0-1015896941

Pawel
17.02.2018
18:59:02
Товарищи, а когда не правильно имплементировал интерфейс, есть тулзы проверить что не так?
пользуйся goland, он показывает стрелочками каким интерфейсам удовлетворяет класс. "имплементировал" - не правильное слово в случае Го

Denis
17.02.2018
19:00:31
пользуйся goland, он показывает стрелочками каким интерфейсам удовлетворяет класс. "имплементировал" - не правильное слово в случае Го
Проблема в том, что я пытаюсь покрыть интерфейсом свои зависимости. Я уже нашел ошибку (час спустя).

Google
Pawel
17.02.2018
19:03:03
http://markets.businessinsider.com/news/stocks/MongoDB-Announces-Multi-Document-ACID-Transactions-in-Release-4-0-1015896941
трудно предположить как конкретно это количественно скажется, но очевидно latency увеличится, а сложность конфигов возрастёт. вопрос - на сколько

Michael
17.02.2018
19:23:10
Slava
17.02.2018
19:27:07
Нельзя в лоб сравнивать sql и nosql

Базы бывают совершенно разные и под разные задачи

Постгрес продвинутее и производительнее sqlite, но последний - самая популярная субд. Просто потому что задачи разные

Даже mysql с разными движками ведёт себя по рпзному

Pawel
17.02.2018
19:30:58
самая популярная - потому что не надо с настройкой сервера возиться, что умеют не только лишь все

Slava
17.02.2018
19:33:06
:) нет, дело не в этом

Admin
ERROR: S client not available

Slava
17.02.2018
19:33:26
Просто это самое стабильное встраиваемое субд

Michael
17.02.2018
19:33:29
на декстопе данные профилей пользователя хранили в sqlite, вот для этого sqlite хорошо подошла

Мерлин
17.02.2018
19:38:16
Тогда у тебя просто не соберётся ошибочный код если тип не удовлетворяет интерфейсу

Greg
17.02.2018
19:42:29
@kirilldanshin будет времячко - загляни в слак русский, в рандом канале оставил мессадж

Не знаю, смотришь ты его или нет :)

Pawel
17.02.2018
20:02:35
на декстопе данные профилей пользователя хранили в sqlite, вот для этого sqlite хорошо подошла
на десктопе и андроиде вообще любые локальные данные - строго в sqlite. ну кроме конфигов конечно

Slava
17.02.2018
20:07:21
В ios так же

Жаль на го ещё не допортировали, хотя и есть проекты

Google
Slava
17.02.2018
20:08:26
Ты можешь сам потестировать ;)

Vladimir
17.02.2018
20:08:48
Ты можешь сам потестировать ;)
Не, ну есть утверждение, значит были какие то тесты :)

Slava
17.02.2018
20:09:14
Посмотри в гугле

Vladimir
17.02.2018
20:10:15
Посмотри в гугле
На сайте sqlite написано что он быстрее :)

Slava
17.02.2018
20:10:40
Быстрее != производительнее

Vladimir
17.02.2018
20:12:29
Быстрее != производительнее
Так, вот я теперь серьезно не понимаю в чём разница между этими двумя словами. В словарях которые я видел это синонимы

Pawel
17.02.2018
20:18:18
А где были тесты sqlite vs postgre?
не корректно требовать такие тесты, эти технологии решают принципиально разные задачи sqlite относительно примитивный, постгрес обладает практически не ограниченными возможностями по оптимизации. поэтому чисто по логике аналогичный объём данных в постгресе будет быстрее процеситься чем в sqlite. скорее всего

Pawel
17.02.2018
20:22:48
а что там написано?

Vladimir
17.02.2018
20:24:21
а что там написано?
Да сам открой их сайт и глянь)

Code
17.02.2018
20:55:59
глобальные может и не очень хорошо, но closure вполне ОК. перенесите var signals в main() и будет по фен шую
ну я глобальные использую когда без этого вобще никак. хотел узнать только насчет вреда глоабальных переменных на обработку в горутинах

Michael
17.02.2018
21:20:33
Да сам открой их сайт и глянь)
https://www.sqlite.org/threadsafe.html

там самое интересное

плюс sqlite может начать загибаться на относительно простых запросах

(не) достатки postgres - это не embedded и не one file storage

Andrey
17.02.2018
21:34:15
есть уже rqlite)

https://github.com/rqlite/rqlite

Denis
17.02.2018
22:55:57
Хочу переопределить тип возвращаемого значения, лучше решения как я понимаю нет? type DataAccess struct { collection *mgo.Collection } func (d *DataAccess) Find(query interface{}) Querier { return d.collection.Find(query) }

The
17.02.2018
23:46:59
Есть у кого-то пример как форматировать длинные многострочные SQL запросы в Go?

Страница 832 из 1630