LINUX.ORG.RU

Сообщения quester

 

Как бы вы сделали поиск?

Нужно для своего сайта вкрутить поисковик по товарам, по смыслу это должно быть как на yandex.market: так когда вводишь в поисковой строке скажем «процессор» то показываются процессоры, а сбоку показываются фильтры по процессорам щелкая по которым можно менять критерии поиска. Сейчас есть мысль использовать sphinx или solr или что-то подобное готовое, но пока не ясно как сделать такой уточняющий фильтр как я написал выше. Поделитесь пожалуйста опытом если решали подобную задачу!

 

quester
()

OneBlade

Кто нибудь такое пробовал? http://www.philips.ru/c-m-pe/oneblade-face-style-shave?origin=1_ru_ru_one_bla...

Как оно если начисто брить? Сколько лезвия стоят?

Есть ли сейчас альтернатива станкам для чистого бритья?

 

quester
()

private field

а что в golang переменную член структуры нельзя сделать приватной? какой тогда смысл создавать методы get()/set() если сама переменная доступна?

 

quester
()

собираю комп, посоветуйте чипсет, виртуалку, прокинуть видяху

Собираю комп ребенку, в основном для игр, но хочу понять имеет ли смысл поставить как host систему какой нибудь GNU/Linux, а венду поставить в вируталку и прокинуть туда видяху. Намного просядут тесты/игры от такого финта, имеет ли это смысл? Какую виртуалку поставить (я кроме virtualbox ни с чем не игрался, но тут наверно нужен какой нибудь kvm, lxc)? Может и дистр какой-то специфический из за виртуалки? Хотелось бы использовать Debian/unstable. Также посоветуйте пожалуйста чипсет под i7 7700k чтобы с GNU/Linux не было проблем. Мать хочу какую-то ASUS в зависимости от чипсета.

 ,

quester
()

Опрос: websocket и socket.io

На заре появления websocket с ним были проблемы в виде того что он не везде прокатывал (насколько я помню резался на роутерах) и потому появились библиотеки типа socket.io которые на клиенте сначала пытались подключиться к серверу через websocket, а если не прокатывало то слали данные своей серверной части через long polling/polling.

Вопрос: насколько сейчас актуальны библиотеки типа socket.io при условии что серверная и клиентская часть контролируется мной, сетевые настройки серверной части тоже, но вот сетевые настройки клиента я контролировать не могу, может он за NAT.

Перемещено leave из talks

 

quester
()

Кто нибудь использует http заголовок Retry-After? Как?

https://developer.mozilla.org/ru/docs/Web/HTTP/Headers/Retry-After

Retry-After это http заголовок в котором содержится целое число, которое означает задержку в секундах. Сервер сообщает клиенту что клиенту нужно выждать указанное количество секунд и повторить запрос. Это дополнительное поле которое может быть указано как минимум к таким http кодам как: 202, 429, 503, 301, 307

Как минимум в 2011 году он уже был.

Не ясна поддержка браузерами, будут ли они в каких-то http кодах использовать эту задержку прозрачно для js. Как например прозрачно для js происходит 301 redirect.

В системах со множеством серверов это актуально и хочется заставить делать клиента перезапрос с тем же методом прозрачно для клиента. Я пока запилил костыль в котором для каждого REST запроса у меня отдельная js функция в которой с помощью XMLHttpRequest я осуществляю запрос, проверяю http код возврата и если он скажем 202, то беру getResponseHeader('Retry-After') и с помощью setTimeout вызываю эту же функцию с этими же аргументами еще раз.

Юзаете те ли вы подобное, как именно и с каким http кодом?

 ,

quester
()

как проверить достоверность данных?

Положим у нас есть два сервера A и B. Клиент заходит на сервер A и получает скажем 64 байт каких-то данных. дальше клиент заходит на сервер B и отдает ему эти 64 байта.

Какие именно байты отдаст сервер A заранее не известно. Сервер B не может запросить сервер A. Сервер A и сервер B ничего не могут знать о клиентах (они не могут регистрироваться и авторизоваться).

Вопрос: как серверу B определить что эти 64 байта получены именно от сервера A?

Возникает идея кроме байтов передавать некую криптостойкую подпись. Подскажите плиз чтобы использовали бы вы?

 

quester
()

create index for json[]

Есть таблица в ней строки с массивами УНИКАЛЬНЫХ значений. Значения уникальны в пределах всей таблицы. Хочется найти строку в массиве которой есть искомое значение. Судя по приведенному ниже логу это получается вот только explain не радует говоря что фильтровал по условию и отбросил 2 строки.

Подскажите плиз как это все можно ускорить? Создать какой-то другой индекс применительно к json? В принципе я могу хешировать эти json и хранить не массив jsonb а массив text или bytea с хешем если это может помочь. Есть какие-то идеи?

postgres9.6=> create table xxx (x_list jsonb[]);
CREATE TABLE
postgres9.6=> insert into xxx (x_list) values (ARRAY['{ "a" : "78", "b" : "157" }'::jsonb,'{ "a" : "19", "b" : "25" }'::jsonb]);
INSERT 0 1
postgres9.6=> insert into xxx (x_list) values (ARRAY['{ "a" : "67", "b" : "51" }'::jsonb,'{ "a" : "124", "b" : "53" }'::jsonb]);
INSERT 0 1
postgres9.6=> insert into xxx (x_list) values (ARRAY['{ "a" : "14", "b" : "32" }'::jsonb,'{ "a" : "36", "b" : "5" }'::jsonb]);
INSERT 0 1
postgres9.6=> create unique index xxx_i1 ON xxx (x_list);
CREATE INDEX
postgres9.6=> vacuum full ANALYZE xxx;
VACUUM
postgres9.6=> set enable_seqscan = off;
SET
postgres9.6=> select * from xxx where x_list  @> ARRAY['{ "a" : "124", "b" : "53" }'::jsonb];
                                x_list                                
----------------------------------------------------------------------
 {"{\"a\": \"67\", \"b\": \"51\"}","{\"a\": \"124\", \"b\": \"53\"}"}
(1 строка)

postgres9.6=> explain analyze select * from xxx where x_list  @> ARRAY['{ "a" : "124", "b" : "53" }'::jsonb];
                                                    QUERY PLAN                                                     
-------------------------------------------------------------------------------------------------------------------
 Index Only Scan using xxx_i1 on xxx  (cost=0.13..12.18 rows=1 width=85) (actual time=0.025..0.027 rows=1 loops=1)
   Filter: (x_list @> '{"{\"a\": \"124\", \"b\": \"53\"}"}'::jsonb[])
   Rows Removed by Filter: 2
   Heap Fetches: 3
 Planning time: 0.085 ms
 Execution time: 0.045 ms
(6 строк)

 

quester
()

одномерные и двумерные массивы

Тут мы видим как мы можем к сохраненному одномерному массиву добавлять значение:

create table a1 (val bigint[]);
insert into a1 (val) values (array[1]);
select array_append(val, 2::bigint) from a1;
 array_append 
--------------
 {1,2}
(1 строка)

А вот тут с двумерным массивом это не получается:

create table a2 (val bigint[][]);
insert into a2 (val) values (array[array[1]]);
select val from a2;
  val  
-------
 {{1}}
(1 строка)


select array_append(val[1], 2::bigint) from a2;
ОШИБКА:  функция array_append(bigint, bigint) не существует
СТРОКА 1: select array_append(val[1], 2::bigint) from a2;
                 ^
ПОДСКАЗКА:  Функция с данными именем и типами аргументов не найдена. Возможно, вам следует добавить явные приведения типов.

как исправить последний запрос чтобы он вернул 1,2 ?

 

quester
()

внешний ключ при инсталяции из магазина приложений

Положим я знаю пользователя которому я хочу предложить установить мое приложение, могу ли я сформировать некий внешний ключ который хранится в моей базе и передать этот ключ в URL на мое приложение в магазине приложений (google play и что там у ios?) чтобы этот ключ был передан моему приложению которое будет ставиться из магазина? Такой функционал есть в google play?

Хочу чтобы приложение при инсталяции увидев ключ само пошло в мою базу и подгрузило всю инфу о пользователе

 ,

quester
()

Как разгребать очередь?

Положим есть у нас несколько серверов с некими очередями в которых накапливаются записи о событиях. Для простоты положим что это таблицы в базах данных в которые добавляются записи. Мы можем узнавать о факте поступления новой записи, при желании можем узнать сколько всего не обработанных записей на каждом сервере.

Далее вопрос: как бы вы натравливали воркеры на эти записи? 1) создали на каждом сервере пул воркеров которые бы периодически либо по сигналу лезли бы за записями? 2) создали бы пул воркеров на сторонних машинах которые узнавали бы о новых записях через какую-то очередь типа rabbitmq? 3) как бы вы решали сколько воркеров нужно натравить на новые записи чтобы с одной стороны их не было мало с другой чтобы сотни воркеров не бросились за одной записью?

 

quester
()

остановить postgresql сервер

есть postgresql сервер, есть куча коннектов к нему от приложений с insert в одну таблицу в какой-то момент мы сообщаем приложениям что insert больше делать не нужно, но это сообщение может запоздать и кто-то все же может сделать insert. можно заставить приложения перед insert проходить через некий глобальный mutex но это не вариант. я сейчас делаю lock table после чего никакой insert не пройдет и дальше нужно либо дергать какой-то скрипт с iptables закрывающий порт либо стопать сервер (боюсь что при стопе lock отпустится раньше чем возможный залоченный insert и insert успеет отработать) либо скажем менять на лету порт или какое-то свойство в сервере. как бы это сделали вы?

 

quester
()

Поддерживает mongodb уникальные ключи?

Вот тут один из разработчиков mongodb утверждает что mongodb не поддерживает уникальность множества ключей в пределах всех шардов и что если создать не уникальные ключи все будет очень плохо - https://www.youtube.com/watch?v=3Yl4hrMb9WA&featur...

Вопрос: как это возможно записать в mongodb не уникальные ключи если у нас уникальность в пределах шарда? мы же не выбираем на какой шард писать? он говорит о каких то пользовательских ключах либо о возможной не уникальности ObjectId в процессе решардинга?

 

quester
()

Виртуальные шарды в Postgresql: маппинг ключа на шард, как это делаете вы?

Подскажите плиз:

1) как вы даете ключу идентификатор? это уникальный идентификатор из глобального сиквенса либо это составной идентификатор из идентификатора сервера и сиквенса сервера? это случайный идентификатор по типу ObjectId из mongodb?

2) как вы подвязываете идентификатор ключа к виртуальному шарду? некоторые (например Badoo вот тут - youtube.com/watch?v=MhGO7BBqSBU с 49:07) говорят о том что не только перемещают виртуальные шарды между серверами, но и отдельные ключи между виртуальными шардами. Как и где вы храните это соответствие между идентификатором ключа и виртуальным шардом? Может в отдельном сервисе на SQL или mongodb? Как?

Я обычно использовал хеширование имени ключа и по последним битам хеша определял шард, те использовал функцию вычисления шарда вместо маппинга на виртуальный шард. Пожалуйста поделитесь опытом как это делаете вы с виртуальными шардами. Заранее благодарен!

 ,

quester
()

Репликация. Правильно ли я понимаю?

В highload решениях часто применяют такую вещь: пишем на master SQL (на который мы только пишем) данные с которого реплицируется на один или несколько slave SQL (с которых мы только читаем).

SQL (я использую Postgresql) гарантирует ACID где буква «C» означает Consistency — Согласованность. Представим ситуацию: есть сервера «A» (master), «B» (slave) и «C» (slave). На сервер «A» в транзакции заносятся атомарно два ключа «X» и «Y». Далее эти ключи с серера «A» должны реплицироваться на сервера «B» и «C». И будут реплицированны атомарно, оба.

Предположим вы читаем данные: случайно выбираем сервер «B» и читаем ключ «X», случайно выбираем сервер «С» и читаем ключ «Y».

Вопрос: возможна ли ситуация когда ключи «X» и «Y» уже реплицированны на сервер «B», но еще не реплицированны на сервер «C»? При асинхронной репликации? При синхронной репликации? Ведь это разные устройста и подобная несогласованность пусть очень короткое время по идее должна быть возможна. Гарантируется ли согласованность в системе из нескольких реплицируемых серверов?

 

quester
()

распахнутый терминал

отставил debian/unstable и wmaker.

распахиваю xterm и он распахивается на весь экран закрывая кнопки wmaker справа.

раньше xterm распахивался, но на кнопки справа не наезжал и под них то-же не заезжал.

подскажите плиз как вернуть старое поведение? перерыл разные настройки и не нашел(

 

quester
()

миграция данных / виртуальных шардов

Кто поверх SQL делал миграцию данных / шардов online (наживую) поделитесь плиз идеями!

как я понимаю нужно завести справочник/функцию который говорит на каком сервере лежит конкретный ключ (запись с конкретным идентификатором). далее процесс миграции должен монопольно захватывать ключи на сервере «A» (select for update), атомарно прятать ключи в скрытую таблицу и не атомарно перемещать на сервер «B» в скрытую таблицу, где атомарно их делать доступными и менять в справочнике местоположение ключей с сервера «A» на сервер «B». Скрытая таблица по идее нужна потому как перемещение ключей между серверами не атомарно и может случится так что в какой-то момент на сервере «B» будет только часть ключей (если мы перемещаем не просто единичный ключ, а множество ключей - виртуальный шард).

как быть если в то время когда началась миграция клиент уже пришел на сервер «A» и не нашел данные? тупо долбится то в справочник то на сервер «A» пока в справочнике не обновится адрес сервера и клиент не зайдет на новый сервер «B»? Может придумать тут какую-то нотификацию вместо поллинга? Как ее сделать?

Как вы строите справочник с соответствием ключа серверу либо ключа виртуальному шарду а виртуального шарда серверу? По какому алгоритму и с помощью каких инструментов?

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

Заранее спасибо за идеи и ответы!

 ,

quester
()

журналирование: mongodb и postgresql

копаю тут mongodb и нашел что там есть настройка storage.journal.commitIntervalMs которая настраивает сохранять журнал каждые 50ms - https://docs.mongodb.com/manual/core/journaling/

отсюда вопрос это что-же получается возможна ситуация когда клиент сохраняет в mongodb ключ, она ему отвечает что сохранила, он продолжает что-то делать будучи уверенным что ключ сохранен, а в это время не дожидаясь очередного сохранения на диск журнала все падает и ключ мы теряем?

далее у update мы видем некий writeConcern - https://docs.mongodb.com/manual/reference/write-concern/ где есть ключ j:true который вроде как заставляет сохранять журнал.

это решает эту проблему?

и тут я вспомнил что у postgresql есть параметр wal_writer_delay = 200ms, что-же получается и у postgresql может быть такая ботва что клиент думает что строка сохранена а все накрылось до сброса журнала на диск???

просвятите плиз!

 ,

quester
()

RSS подписка на новые темы