Никита: У меня входные данные увы в JS Object, можно превратить его в JSON путём не хитрых манипуляций с текстом, но это не правильный подход.
Чисто парсеров для JS Object не нашёл.
Дописать в encondig/json так что бы это работало - не на пару минут задача.
Попробовал несколько json библиотек на предмет возможности легко дописать или попытки распарсить JS Object - предсказуемо не заработали.
Чисто JS парсер - была такая мысль, вопрос только что именно взять...
Вы немного не правы. У топикпастера не валидный JSON, будет сообщение об ошибке
error: invalid character 'f' looking for beginning of object key string
А raw будет иметь значение []
Вопрос - как распарсить валидный JavaScript Object но при этом не валидный JSON как у топикпастера? У самого такая задача сейчас. Буду признателен если кто-то подскажет.
По своей сути там надо придумать свой GC. И если переформулировать задачу именно как "сделать GC для удаления из map" то и подходы надо искать из этой области. Ответов мало видимо потому что аудитория такое не пишет. Если будут мысли в будущем - дополню вопрос.
VZVZ: вы уж определитесь, или компанию которая в это ооочень много сил вкладывает, создавать или предлагать неопытным программистам (коим топикпастер может стать) вносить правки в чужой большой и адски тормозной проект где от него помощи будет процентов...
VZVZ: вы так о моём мышлении судите?:) Я просто вижу кучу всего на что времени не хватает, а вы предлагаете тратить его на улучшение проекта который по сути блокнот с кучей примочек для программирования. Если лично вам хочется что-то улучшить в Eclipse то пожалуйста, это свободная страна:) Просто как пример, я думаю, не то на что надо обращать внимание других желающих поучаствовать в Open Source.
Вы уверены что Eclipse это тот продукт на который надо тратить время?:) Не одним Eclipse живо направление IDE и их уже и так много на все вкусы. Толку делать ещё один или пытаться улучшить "в некотором роде" монстра Eclipse. Есть куда более важные вещи.
Недавно узнал что если распространять только скомпилированные версии package (те что в каталоге pkg) то без исходного кода (то чо в каталоге src) оно собираться с приложением (package main) не будет.
Статей на тему как подключить Golang пакет скомпилированный как dynamic library пока не попадалось, но, возможно есть возможность сделать через Си прослойку. Другой вопрос что топикпастеру всё равно придётся раздавать исходный код самого приложения, а клиентам компилировать его занова.
Как вариант - сделать веб-сервис где клиент выбирает список модулей, оплачивает и получает скомпилированный бинарник с нужным количеством функционала без исходного кода. Или с исходным кодом.
dzoid: суть агрегации данных в памяти в следующем:
оперативка очень быстрая
данные суммируются за какой-то период в быстрой оперативке
отдельным процессом раз в N минут выгружается не 100 000 UPDATE по каждой новости, а только 1 на каждую новость
Рассчитать можно так:
было 200 новостей за 10 минут, по каждой пришло 100 000 просмотров, 200 * 100 000 = 20 000 000 Update
стало 200 новостей за 10 минут, по каждой пришло 100 000 просмотров, в памяти 200 * 100 000 = 20 000 000 складываний (прирощений переменной), при этом число укладывается в int (int64) и новой памяти не выделяется, всего 200 переменных. в базу = 200 Update, по одному на новость.
in-memory в PHP - это вообще любое решение которое хранит в памяти, но с memcache надо учитывать что это отдельный сервис со своими правилами и говоря про in-memory в PHP я имею в виду библиотеки для работы с оперативной памятью между перезапусками скрипта (shared memory) с доступом внутри PHP непосредственно. Тут можете выбрать любое решение где можно атомарно увеличивать число просмотров.
Например aerospike, пишут что внутри оно как раз адаптированно к работе с SSD, но в теории всё верно - есть ограниченный набор инструкций которые можно выполнить и главное знать основные логические отличия и как бы всё. Больше особо ни на что не повлияешь. Ещё, возможно, речь идёт о том что бы читать/писать секторами без файловой системы - это действительно должно быть быстрее, но не на много, важно не наделать багов в софте.
Что мешает выбрать любой бесплатный Linux дистрибутив на свой вкус? Тот же Alt Linux который вам советуют не на пустом же месте образовался, там так же взяли какой-то другой забугорный дистрибутив и внесли правки. Возможно вам нужен Linux c сертификацией от ФСБ и прочих? Вроде бы в России таких 2 или 3 всего, с разными сертификатами. Можно поискать поиском по linux.org.ru
Тоже интересно что за муниципалитет и откуда такая аналогия.
Никита: У меня не чат, но уведомления в real-time и к чему бы эта задача не применялась - важен логический вопрос. Как делать эффективное удаление с минимумом блокировок, с минимумом задержек и так далее. Сама природа откуда это не так важна.
go processMap(readRequest, readValue, writeValue, deleteKey, quit)
-- вот эту функцию вы можете запустить в виде горутины лишь один раз, иными словами с данными которые она защищает вы работаете в однопоточном виде. Это отличное решение на потоках.
Но обеспечить многопоточное чтение (всего списка целиком) или многопоточное чтение отдельных элементов (одновременно) так не получится. Так же как только вы захотите удалять или модифицировать сразу несколько элементов разом (транзакция) каналы так же не подойдут и код усложнится.
Вы по сути сделали однопоточный доступ, а этого хотелось избежать.
RWMutex использовался для того что бы максимально мало блокировать map на чтениях и делать чтения параллельными (там real-time websockets).
Сбрасывать RLock и брать Lock внутри цикла - плохая идея, так как захватить управление может кто угодно.
Делать Lock перед циклом так же плохая идея - потому что конкурентные чтения будут ждать и превратятся в однопоточный вариант.
Сейчас остановился на следующем:
1. оставляем RLock перед циклом
2. во время цикла накапливаем ключи которые нужно удалить
3. после цикла отпускаем RLock
4. если накопили ключи - запускаем горутину в которой берём Lock и удаляем все разом
При условии что цикл пробегается относительно быстро можно считать что конкурентность соблюдена, есть вероятность что соберётся несколько одинаковых списков на удаление, но тут уж ничего не поделаешь без усложнения кода и дополнительных блокировок.
Есть ещё вариант - можно помечать элементы в map флагом через atomic, а для удаления сделать горутину которая будет раз в N минут ходить по списку чтением, собирать список удаляемых и потом по схеме выше удалять всех разом. Зато не будет лишних попыток удалить одно и тоже. Для нагруженных WebSockets чатов это, возможно, подойдёт больше. Ещё вариант посмотреть как это сделано в Centrifugo, но возможно там тоже всё через каналы.
Не поделитесь списком своих платных/бесплатных плагинов для WordPress? Можно в личку либо публично здесь. Можно и не сейчас а когда таковые появятся - думаю все кто подписался будут заинтересованы узнать что именно вы выпускаете и, возможно, кто-то из них станет вашим клиентом в будущем:)
Чисто парсеров для JS Object не нашёл.
Дописать в encondig/json так что бы это работало - не на пару минут задача.
Попробовал несколько json библиотек на предмет возможности легко дописать или попытки распарсить JS Object - предсказуемо не заработали.
Чисто JS парсер - была такая мысль, вопрос только что именно взять...