Anonymous
если бы создавалась копия то всё накрылось бы ))
Тоесть по ссылке если менять, будет кушать меньше памяти?
Daniel
если бы создавалась копия то всё накрылось бы ))
map - ссылочный тип, фактически. реального копирования не происходит
Anonymous
map - ссылочный тип, фактически. реального копирования не происходит
Вот этого не знал, спасибо за информацию!!! Биг спасибо!
Michael
в офф доках это есть
Anonymous
в офф доках это есть
Да понятное дело что есть ) Я просто не тру Golang кодер, мне до тру как до берлина )
ill-ya
У меня получается массив с 200млн uint64 - занимает в пямяти 2 гб
ill-ya
Мне надо сохранить его и восстанавливать в память
ill-ya
gob виснет и при записи разходует 10гб. что не юзабельно
ill-ya
какие варианты как думаете?
Anonymous
в офф доках это есть
Зато я знаю как из файла скомпилированного через LiteIDE весом в 6 925 155 байт сделать рабочий бинарник размером в 995 328 байт при этом всё будет работать как часы ) А ещё говорят Go огромные бинарники компилит )) Но я думаю вы тоже знаете как это сделать )
Anonymous
gob виснет и при записи разходует 10гб. что не юзабельно
Где-то был очень быстрый сериализатор который работает через unsafe
Daniel
какие варианты как думаете?
писать построчно, и потом построчно читать. иначе строковое представление формируется в памяти рядом с бинарным, что для ваших объемов не есть гуд
ill-ya
попробую найти
ill-ya
еще думаю надо бы сжать через radix trees? стоит пробовать?
ill-ya
был опыт?
ill-ya
скорость поиска и размер как?
ill-ya
необходимые для работы системы
Мерль
Мне надо сохранить его и восстанавливать в память
Нарезай на куски, кодируй и пиши в файл Восстановливай так же
ill-ya
там даже больше чем 2млн
Dmitry
докупи оперативки)
ill-ya
gob очень ресурсный подход
Мерль
У меня получается массив с 200млн uint64 - занимает в пямяти 2 гб
Если у тебя не меняются данные, можно применить дельта-кодирование
ill-ya
ибо 30млн занимают 400мег оперативки
ill-ya
а при гобе съедается 2 гига
ill-ya
следовательно на 200 млн надо гигов 15
Мерль
не меняются - можно инфу?
Ну ты вот загрузил числа в память - ты потом их меняешь?
ill-ya
нет
ill-ya
там у меня структуры
ill-ya
но можно и без них думаю обойтись
Мерль
Если хранишь числа, особенно целые, можно хранить в массиве не их, а разницу между i-ым числом и i+1
Anonymous
писать построчно, и потом построчно читать. иначе строковое представление формируется в памяти рядом с бинарным, что для ваших объемов не есть гуд
А кста тут задача была интересная, я так и не смог решить. Человеку нужно было читать огромные файлы, а точнее искать в этих файлах вхождения определенные. Так вот у него был велосипед (обвязка на findstr - стандартная утилита Windows) но этот велосипед падал при размере файла больше 15 гб, при этом нагружал SSD диски на полную катушку. Я попробовал реализовать подобное на Golang, но у меня не получилось нагрузить диск на 100%, было около 75%-80%, человек сказал, что ему надо на 100 и всё тут. Вопрос, почему Golang при построчном чтении не забивает диск на 100%? )
Мерль
Используя для этого например не uint64, а uint16
ill-ya
Если хранишь числа, особенно целые, можно хранить в массиве не их, а разницу между i-ым числом и i+1
тут я просто беру знаение - а так надо сложить 200млн значений чтобы его получить
ill-ya
боюсь это долго
Мерль
боюсь это долго
Можно хранить кусками по 4к например
ill-ya
тут именно надо быстро получать значения
ill-ya
думаю сделается узкое место
ill-ya
память 2гига есть когда данные загружены
ill-ya
вопрос их сохранить
Axm
я правильно понимаю, что в Go нельзя сделать неявную инициализацию объекта для вызывающей стороны? т.е. внутри пакета вызвать метод, который сам все заполнит при обращении к этому объекту, если он еще не инициализирован.
Мерль
А что это за данные?
Зная специфику данных, можно подсказать и способ
Axm
Нет
ага, спасибо
Dmitry
ибо 30млн занимают 400мег оперативки
как так получилось? у меня 30млн uint64 1.1 Гб съело
Илья
тут я просто беру знаение - а так надо сложить 200млн значений чтобы его получить
для похожей задачи я писал бинарь сразу as is на диск и читать потом as is
Илья
data, err := ioutil.ReadFile(path) if err != nil { return nil, err } res := make(SuccessList, 0, len(data)/4) // preallocate full size var t uint32 for i := 0; i < len(data); i += 4 { t = binary.LittleEndian.Uint32(data[i : i+4])
Илья
что-то такое
Dmitry
ибо 30млн занимают 400мег оперативки
а 200млн 1.5Гб, мб ты что то не так делаешь?
ill-ya
у думаю не почистилось
ill-ya
будет меньше
ill-ya
щас скажу точне
Dmitry
а в чём хранишь?
Anonymous
люди на винде сидят, бывает. говорят очень много.
пускай сидят на чем хотят, среда выполнения ведь != среде разработки в общем случае.
Anonymous
в смысле, скрипт должен выполняться под оптимальной ос
Anonymous
для скрипта
Anonymous
а не под тем, под чем разрабу проще в игрушки играть )
Aleksandr
в смысле, скрипт должен выполняться под оптимальной ос
скрипт должен выполнять под ОСью заказчика в общем-то
Anonymous
винда мне требовалась за всю жизнь 1 раз - какие-то шифровальные библиотеки специфические только для винды были. был сервер на винде и админ там мышкой натыкивал настройки (то ещё зрелище) а так, заказчик не заказчик, винда мало того, что платная, так ещё и не удобная и если аргументов ее использовать не вижу
Anonymous
ну аргументация "как просит заказчик" аналогична
Anonymous
есть какие-то доводы у заказчика?
Axm
линукс мне требовался за всю жизнь 1 раз - какие-то библиотеки специфические только для линукса были. был сервер на линуксе и админ там в консоли натыкивал настройки клавиатурой (то ещё зрелище) а так, заказчик не заказчик, линукс мало того, что сложный, так ещё и не удобный и если аргументов его использовать не вижу
Aleksandr
есть какие-то доводы у заказчика?
да, это его ОСь. собственно все
Aleksandr
вообще смешно будет когда ты будешь просить менеджера перейти на линь, чтобы удобно парсить текстовые файлы, которые ему нужны по работе
Anonymous
опять таки не совсем понимаю )
Anonymous
ос для работы и ос для скрипта - 2 разных окружения
Anonymous
почему скрипт на чьейто машине должен гоняться и из этого строится требования к скрипту
Anonymous
т.е. задача звучит так: написать консольную утилиту для использования человеком под виндой?
Aleksandr
именно. обычно в офисах заказчики под виндой. под линем только разработчики и сервачки