@gogolang

Страница 1219 из 1630
Александр
11.07.2018
08:56:50
я про свойства

Sergey
11.07.2018
08:57:45
Как лучше сделать тестирование функций создающих таблицы в БД? Отдельный конфиг с данными для подключения к тестовой базе? В тестах немного опыта, интерсено мнение опытных гоферов.

The
11.07.2018
08:57:58
Немного непонятно просто
пример сложно описать, там много кода на самом деле. просто представь себе три пакета: модели, коллекции, и репозиторий. модели - это структуры, коллекция - интерфейс для работы с множеством моделей, репозиторий - сохраняет/извлекает модели и создает из них множества(коллекции).

Google
The
11.07.2018
09:02:38
репозиторий (допустим метод Query который выбирает откуда-то данные) делает так: c := NewProductCollection() // например, делаю выборку из базы for rows.Next() { c.Push(model.Product) } c.Lock() // блокирую коллекцию от изменений return c // возвращаю коллекцию, и её могут только читать в другом месте c.Unlock() сделать не получится, т.к. заблокирована она была на этапе создания, тоже самое, когда мы хотим сохранить коллекцию в базу, мы допустим вычитали тело запроса из JSON, создали коллекцию и запушили туда наши модели, и сразу заблокировали, и передали это все в репозиторий, который может только прочитать из этой коллекции.

Sergey
11.07.2018
09:03:58
зачем там вообще тесты?
Разве это не нужно протестить? Может SQL коряво написан или еще что?

Антон
11.07.2018
09:12:19
Зачем имитировать иммутабельность в языке, если можно просто взять язык, который её поддерживает с самого начала?

The
11.07.2018
09:17:14
Потом реализовать сами функции с проверкой флага и с возвращением ошибок
да, это через флаг и работает, в целом. проблема в том, что если методы публичный, то Lock()/Unlock() может делать кто угодно, а не только создатель коллекции.

Google
Илья
11.07.2018
09:18:14
но все это пахнет джавой и плохим дизайном, на мой вкус

The
11.07.2018
09:20:40
да, действительно изи) ладно, может и без иммутабельности запилю, спасибо

Alexandr
11.07.2018
10:03:45
ok ) отличный результат, очень наглядно
надо ещё алгоритмы других решетов будет потестить )

Den
11.07.2018
10:17:52
Или sync.Map
Он блокирует всю мапу? Т.е. у меня горутина пишет в одну ячейку. Мне не надо блокировать всю мапу целиком а только эту ячейку...

V
11.07.2018
10:19:14
вопрос что у вас будет при изменении размера мапы с ключиком, я не готов ответить. преждевременная оптимизация - зло

Lesha
11.07.2018
10:23:35
Он блокирует всю мапу? Т.е. у меня горутина пишет в одну ячейку. Мне не надо блокировать всю мапу целиком а только эту ячейку...
сделайте шардинг мапы по ключу. вместо одной большой и толстой мапы несколько поменьше и блокируйте их

Lesha
11.07.2018
10:25:20
она умная.
не настолько умная, что бы при записи не блокировать всю мапу

Den
11.07.2018
10:25:40
сделайте шардинг мапы по ключу. вместо одной большой и толстой мапы несколько поменьше и блокируйте их
Ну у меня и так несколько поменьше. Просто они лежат в мапе общей. И время доступа к ним О(1). В чем хранить маленькие мапы если ее в другой мапе?

Den
11.07.2018
10:29:00
Да меня больше наверно интересует 2 вопроса: 1. Почему происходит блокировка? Ведь это тот же массив, я могу читать и писить в ячейку одним потоком без блокировки если другие пишут в другой

В другие ячейки

V
11.07.2018
10:30:42
потому что во время чтения и записи возможен вызов косвенных операций, которые приводят к ошибкам при несинхронизированном вызове

Vladimir
11.07.2018
10:30:46
а что? https://golang.org/src/sync/map.go
Чуток более сложная штука

Сам же ссылку дал

Google
Lesha
11.07.2018
10:31:58
Чуток более сложная штука
сложнее, согласен, но просто более оптимизированная

для некоторых случаев

Vladimir
11.07.2018
10:33:33
сложнее, согласен, но просто более оптимизированная
Ну поэтому все же оно не мапа с мьютексом, ведёт себя иначе

Lesha
11.07.2018
10:33:37
но энивей там блокируетя на запись вся мапа

Илья
11.07.2018
10:37:09
Да меня больше наверно интересует 2 вопроса: 1. Почему происходит блокировка? Ведь это тот же массив, я могу читать и писить в ячейку одним потоком без блокировки если другие пишут в другой
потому, что при вставке ключа может создаваться новый бакет, и создание бакета может быть инициировано несколькими разными ключами

Anna
11.07.2018
11:53:51
#работа #remote Всем привет! Ищу экспертов с большим практическим опытом в GO, готовых передавать свои знания другим! Занятость преподавателя складывается из проведения вебинаров и проверки домашних заданий студентов. И то, и другое оплачивается. Продолжительность одного курса -около 5 месяцев. Преподавать можно в любой точке мира, без отрыва от основной работы. Есть вариант записи видеокурса. От вас не требуется опыт преподавания, мы с удовольствием и бесплатно научим вас учить! С радостью отвечу на все вопросы. Лучше в личку

Alexander
11.07.2018
14:36:17
Ребят, хочу написать свою небольшую KV БД, что от нее требуется 1) возможность insert/delete, update не нужен 2) очень быстрая запись 3) индекс по ключу 4) возможность "постраничной" подгрузки в память, чтобы не держать все в RAM

существующие решения какой-то оверхед

что можно почитать? с чего начать?

Anton
11.07.2018
14:38:14
что можно почитать? с чего начать?
https://github.com/Netflix/rend реализиция протокола, метрики, общий дизайн

Kirill
11.07.2018
14:38:55
ошизенный ответ %))

на ноду сколько? лям? 10? 100? 10 тысяч? 100 тысяч?

Alexander
11.07.2018
14:40:02
соре

какой порядок количества ключей?
может быть 1млн, а может быть и все 100млн

Kirill
11.07.2018
14:40:34
может быть 1млн, а может быть и все 100млн
на один сервер или на несколько?

Alexander
11.07.2018
14:40:58
на ноду сколько? лям? 10? 100? 10 тысяч? 100 тысяч?
как пользователь решит, может шардить, может и не шардить, возможность шардинга и реплик я как-то упустил, тоже бы неплохо иметь

Google
Alexander
11.07.2018
14:43:11
Мне конечно очень стыдно, но я не могу ответить на этот вопрос

Kirill
11.07.2018
14:43:41
да забей на "стыдно", пойди погугли и выбери

Dmitry
11.07.2018
14:48:53
существующие решения какой-то оверхед
Чисто из интереса, какие решения вы смотрели?

Admin
ERROR: S client not available

Alexander
11.07.2018
15:00:22
Чисто из интереса, какие решения вы смотрели?
badger, buntdb badger - не нужные мне MVCC, + кажется очень громоздким и тяжелым, быстро работает на многопоточности buntdb - тоже отличная база, очень быстрая на запись, не нравится что ключ-значение только строки, и надо конвертить в строка-слайс-байт и обратно при хранении, + медленно работает на многопоточности. На одном потоке работает сильно быстрее чем badger по моим тестам. Куча индексов, которые мне не нужны

Alexander
11.07.2018
15:08:58
Не знаю, может вам что то приглянется из готового https://www.g2crowd.com/categories/key-value-stores
хотелось бы именно embedded решение, boltdb не пробовал, но по отзывам может запросто покалечить данные и вроде как исправлять не собираются

Alexander
11.07.2018
16:27:09
А как на счёт leveldb?
посмотрю, спасибо

Человек
11.07.2018
17:03:35
Здравствуйте, как можно выделить память через kernel32.NewProc("VirtualAlloc"), я просто в сисколах не разбераюсь и не знаю какие нужны аргументы для сискола

Человек
11.07.2018
17:20:58
если ты не разбираешься в сисколлах, зачем тебе такая аллокация?
Не важно зачем, я просто хочу узнать как это можно сделать

Kirill
11.07.2018
17:26:24
Это запрещено делать на вин10 uwp

Иван
11.07.2018
17:27:06
все можно сделать

Kirill
11.07.2018
17:27:29
можно, но на uwp нет virtualalloc

Google
Kirill
11.07.2018
17:27:47
вопрос - -н-а-х- зачем?

Человек
11.07.2018
17:35:24
вопрос - -н-а-х- зачем?
не знаю, сначала думал быстро увеличить allocation для повышения производительности хоть в golang стоит garbage collector

‎‎‎‎
11.07.2018
17:37:25
если я буду из нескольких горутин работать с мапой без мьютекса - будет плохо?

Daniel
11.07.2018
17:45:04
А как на счёт leveldb?
Это не база, а движок хранилища, и его, вроде, нет на go нативного

Иван
11.07.2018
17:45:56
Посоветуйте материал для обучения

Антон
11.07.2018
17:46:09
Да, может быть плохо
Эх, если бы только был язык, который предотвращал подобные ошибки на этапе компиляции. Но это только мечты...

Daniel
11.07.2018
17:46:19
если я буду из нескольких горутин работать с мапой без мьютекса - будет плохо?
Смотря что называть работой. Читать можешь невозбранно. Но если рантайм обнаружит одновременные чтение и запись - он бросит панику

Антон
11.07.2018
17:46:39
если я буду из нескольких горутин работать с мапой без мьютекса - будет плохо?
Если модифицировать — то да. Если все только читают — то норм

Антон
11.07.2018
17:47:33
Первая ява.
То есть?

Человек
11.07.2018
17:49:11
Кстати насчет ошибок чтоб 100500 раз не компилировать вроде бы в Visual Studio есть плагин который отслеживет ошибки, как только ты сохраняешь файл ctrl+s у тебя подствечиваетася зеленым или красным (красным там где ошибка) оооочень полезный плагин

Daniel
11.07.2018
17:49:12
В первой яве все структуры данных были обложены мутексами. К 1.2 пришлось написать параллельные реализации, без мутексов. Очень тормозило...

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