clayratrtsome 19.06.2012 18:35

смотри, какой я тебе джоб оффер нашел: http://intercrossing.wikispaces.com/Job+...

1. jtootf 19.06.2012 19:54

какие у них там игрушки, а

2. clayratjtootf /1 19.06.2012 21:07

а чо, выглядит солидно
носкуэль, скала, категорные схемки для процессов
так и надо, ящитаю

3. jtootfclayrat /2 19.06.2012 21:09 galois

всячески поддерживаю. давно пора

4. gdsclayrat /2 19.06.2012 21:32

nosql НЭ НАДА.

5. clayratgds /4 19.06.2012 21:33

That means that queries which would even be impossible to perform with a standard Relational DB, just take a couple of seconds with Bio4j — сообщают нам на сайте

6. gdsclayrat /5 19.06.2012 21:36

про impossible не верю. В 95% случаев использование nosql является вредом (себе, работодателю, клиентам). Либо по гарантиям, которые от nosql не получить, либо по "неосиляторству" реляционок и превращение модели данных в говно (что потребует тонны времени на поддержку). Впрочем, надеюсь, у них всё будет хорошо — если есть категорное, то и типизация, какая-никакая, да есть.

7. clayratgds /6 19.06.2012 21:41

вот тут как-то обосновывают http://www.slideshare.net/pablo_pareja/b...

8. gdsclayrat /7 19.06.2012 21:46 umodniCEA77F85

благодарю. Буду фтыкать чуть подробнее в это всё.

9. clayratgds /6 19.06.2012 22:03

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

10. gdsclayrat /9 19.06.2012 22:09

да вроде не должно быть особо много рассела. А где оно есть? Есть примеры? Тоже подумать хочу.

А контракты — тоже как бы типизация, только в рантайме и иногда "отложенная" (если "post-contract"). Если уж хочется — чего бы и нет. Всегда можно вместо "post-contract" ввести "pre-contract", когда будет определённость. Если нужно, конечно.

11. rtsome 20.06.2012 18:11

спасибо, годная вакансия, но фейл начинается сразу с
>Undergraduate degree in one of: MATHEMATICS, COMPUTER SCIENCE, IT. | ESSENTIAL
по теоркату я знаю только основы самые, а алгоритмов на строках не знаю совсем.
но зато они годных линков накидали хотябы. пиздец, в рашке никогда такой толково написанной вакансии не видел.

12. rtsomegds /4 20.06.2012 18:17

ну вам — не нада. вообще для 99,99% достаточно мускула.
а некоторым и масштабируемость нужна.

13. rtsomeclayrat /5 20.06.2012 18:25

>neo4j
ну это вообще пушка.
начнём с того, что доступная реализация позволяет только однопоточную запись.
этим можно и закончить, ибо полагаться на то, что какая-то пипиетарная магия что-то там решает, здравый человек не будет.
вообще, есть сильное подозрение что там просто нахуячили каких-то своих, ориентированных на графы, транзакций поверх какого-нибудь kv-store с шардингом, и пытаются это продать (уже лет десять).
вообщем оче смешно видеть в презентации такие слова как very (!) scalable.
но, вполне вероятно, что они предлагают просто там хранить огромную базу с очень низкой конкурентностью на запись, тогда они вообщем-то правы оказываются.

14. gdsrtsome /12 20.06.2012 18:29

масштабируемость делается и в пределах sql неплохо.

15. rtsomegds /14 20.06.2012 18:32 home

ага, но только на чтение и только с потерей консистентности.
можно вообще dbf-ки rsync-ать, тоже очень неплохо может получиться. в некоторых приложениях.

16. gdsrtsome /15 20.06.2012 18:46

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

17. rtsomegds /16 20.06.2012 19:15 home

распределённые транзакции либо люто тормозят либо просто не работают.

18. gdsrtsome /17 20.06.2012 19:22 umodni2C560F37

фор хум хау. Есть и другие способы сделать нужный уровень консистентности.

19. rtsomegds /18 20.06.2012 19:28 home

какие же есть другие методы кроме транзакций в реляционных бд?

20. gdsrtsome /19 20.06.2012 19:44

например, можно хранить изменения, выполненные на одной базе, в высокоуровневом виде (не конкретные sql и не конкретные изменения данных, а действия, типа "пользователь создал поддиректорию"), в какой-то таблице, далее эти изменения уже накатывать на остальные базы, с каким-то разрешением конфликтов.
Можно использовать и другие схемы, их есть достаточно, придумать можно ещё больше.

21. rtsomegds /20 20.06.2012 19:49 home

бля, так это и есть отсутсвие консистентности, да, так и делают при использовании всяких kv-стораджей.

22. gdsrtsome /21 20.06.2012 20:08 umodni2C560F37

это частичная консистентность — реплики, по итогу, когда всё смержат, будут консистентны. Иногда это очень хорошее решение.
Есть и другие схемы — например, несложно пишется "менеджер транзакций" (для постгреса точно, для оракла вроде тоже подобными способами).

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

23. clayratgds /22 20.06.2012 20:13

по моему, что-то в том же духе и предлагает, eventually consistent
смысл носикеля же как раз в отказе от мегаконсистентности

24. gdsclayrat /23 20.06.2012 20:15

да тут как посмотреть. И в реляционках, и в носикеле можно оформить и мегаконсистентность, и eventually consistent transactions, и хоть чорта лысаго. Вот меня и удивил переход мысли в #onsogt/15 , который я увидел как "нам нужна [такая-то] консистентность, поэтому берём nosql".

25. clayratgds /24 20.06.2012 20:17

там помоему чел имел в виду "нам нужна масштабируемость на запись поэтому nosql"
правда хуй знает что такое "масштабируемость на запись" :D

26. rtsomegds /22 20.06.2012 20:18 home

>что же носикель предлагает для охуенно-ниибической консистентности?
лолшто? нихуя конечно же. какбе о том и речь что если всё равно костыли приходится писать, то не лучше ли от неё отказаться например.
и я бы охуенно посмотрел как ты "несложно" пишешь распределённый менеджер транзакций. можешь даже просто примеры написанных привести, мне какраз нужен.

27. gdsrtsome /26 20.06.2012 20:21 umodni2C560F37

ну пиздец. "нихуя" — оно не всегда приемлемо по условиям задачи. Если "нихуя" приемлемо — бери sql, бери nosql, что угодно, всё будет работать, большие отличия в производительности sql vs nosql не будут заметны, если руки прямые.
Если "нихуя" неприемлемо — вот тут nosql начинает требовать некоторых костылей, тогда как в реляционках есть штатные средства.

28. rtsomegds /27 20.06.2012 20:26 home

штатные средства не масштабируются, поэтому, чтобы самому не костылять eventual консистентность берём nosql, там уже есть.
так что там с менеджером транзакций? нагугли мне хотябы масштабируемый сервис локов.

29. rtsomegds /24 20.06.2012 20:27

тебя послушать — так всё возможно.
только похоже что это не так.

30. rtsomeclayrat /25 20.06.2012 20:28

например когда хотсет становится размером, который не влезает в одну машину.

31. gdsrtsome /28 20.06.2012 20:30

ой прям костыли — сделать eventual consistency в rdbms. Учитывай, что консистентность зависит от предметной области, и если nosql предлагает какое-то одно штатное решение, с большой вероятностью оно мне не подойдёт.

Про менеджер транзакций говорить не стал, думал, будет неинтересно. Однако, если настаиваешь... Мне в ближайшее время будет нужен менеджер транзакций для распределённого редактирования графов, хранимых в постгресе. Если готов проспонсировать разработку данного проекта под gpl — можем поговорить. Собственно, из-за привязки менеджера к предметной области и возникает необходимость делать его для каждой задачи отдельно.

Сервис локов гугли сам, мне это неинтересно: ни по затратам времени, ни по применимости нагугленного результата.

32. rtsomegds /31 20.06.2012 20:34 home

про silver bullet никто не говорил.
и ты видимо не понял намёка: ты нихуя не нагуглишь и тем более не напишешь.
хотя напишешь конечно, но совсем не то, что ты тут обещаешь, а очередной никуда не годный говнокостыль.

33. gdsrtsome /32 20.06.2012 20:36 umodni2C560F37

что ж, время покажет. Если проект дойдёт до реализации — по-любому буду его писать, вариантов у меня не густо. А там и поделюсь впечатлениями.

34. gdsrtsome /32 20.06.2012 20:37 umodni2C560F37

но, всё же, не нравится мне твой тон речи. Будь попроще штоле.

35. rtsomegds /34 21.06.2012 20:07

да, разговор хуёвый какой-то вышел напишу/ненапишу.
ты алгоритм просто опиши да и всё ясно сразу будет.

36. gdsrtsome /35 21.06.2012 20:39

итак, цель менеджера: адовая консистентность всех реплик sql-сервера.
вот один из вариантов (в специфике постгреса): менеджер обслуживает операции записи, сериализует их внутри себя (грубо говоря, лочит все очереди команд к репликам и срёт туда), отправляет всем репликам команду "выполнить следующие изменения (в простом случае — тупо dml-операторы) и приготовить транзакцию к коммиту" ("prepare transaction" в постгресе), после чего данные сохраняются на диске для последующей фиксации транзакции ("commit prepared"), которая будет запущена менеджером в случае успеха транзакции на всех репликах. Prepared transactions фиксируются быстро.
Можно ещё кучу всего конкретизировать, но отдельным образом, смотря что будет интересно.

37. rtsomegds /36 25.06.2012 17:17

централизованный менеджер → не масштабируется.
я думал что распределённые транзакции в постгресе есть изкаробки.
вот ещё можешь глянуть: http://codahale.com/you-cant-sacrifice-p...

38. gdsrtsome /37 25.06.2012 17:36

> централизованный менеджер → не масштабируется.

Не совсем понял терминологию, слово "масштабирование" используется по-разному. Тут речь про то, что 1. есть дохуя данных и операций с ними, и это надо раскидать на разные хосты, хранящие свою часть данных? 2. есть дохуя хостов, и нужно уметь добавлять ещё?

> я думал что распределённые транзакции в постгресе есть изкаробки.

А я вообще как-то не смотрел на наличие изкаробки, меня бы они не устроили, наверное: например, в случае п.1 из моего вопроса-уточнения про масштабирование. Точнее, на первое время устроили бы, если бы передавали просто изменения данных, но для будущего — навряд ли.
Кстати, я посмотрел ещё подробнее на менеджеры транзакций. Хотя бы для своего удовольствия таки напишу (хотя бы чтобы посмотреть, насколько я лох), но не в самое ближайшее время. Буду публиковать в псачике в том числе.

Статью прочитал. Так и думал, что чистое CAP мало где полезно, если брать C, A, P булевыми, и всегда нужен компромисс, подходящий задаче.

39. rtsomegds /38 25.06.2012 18:26

есть дохуя данных и операций и их с каждым днём всё больше, т.е. 1+2.
наличие центрального менеджера транзакций накладывает ограничение сверху на количество операций, что противоречит обоим пунктам.

40. gdsrtsome /39 25.06.2012 18:34

> 1+2

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

если же речь про количество трафика этих операций, то его можно сделать небольшим — передавать только указание, что конкретно нужно изменить.

41. rtsomegds /40 25.06.2012 19:15 home

>партиционирование
очень сильные ограничения на транзакции, добавление хостов — всё совсем непросто становится.

42. gdsrtsome /41 25.06.2012 19:21

ограничения на транзакции — не очень серьёзные. Про хосты — да, это так. Но разные nosql тоже как-то должны решать добавление хостов, и у них тоже есть либо переброс данных, либо редиректы. А эти штуки — весьма специфические по отношению к предметной области. Поэтому в их ручном кодинге не вижу ничего сверхплохого, хотя и попробую родить что-нибудь более-менее универсальное.
В игрушечных примерах у меня всё заебато получалось, а вот на реальных данных — опять же, буду пробовать, буду отписывать в псто. Очевидно, что говна поем, но, скорее, работать будет прилично.

43. rtsomegds /42 25.06.2012 19:35 home

избыточность+консистентное хеширование → в обычном случае можно обойтись без редиректов, переброс 1/n части данных при добавлении n-ого хоста. так сделано в riak/dynamo. предметная область не при делах.

44. gdsrtsome /43 25.06.2012 19:40

1/n часть данных получает n-ный хост, да, но разве там нет перебросов между остальными n-1 хостами? Я давно читал про riak, но там, по идее, должны быть. Ошибаюсь? Если да — сообщи, будет интересно поглубже вникнуть в это.

А предметная область в реляционках — таки при делах, потому что реляционка гарантирует отношения между данными, всякие foreign keys. Может какие-то зависимые данные надо перебросить тоже, может нет, а может надо перебросить, заменяя что-то одно на что-то другое. Тут зависит от того, как с ними работают.

45. rtsomegds /44 25.06.2012 19:52 home

просто при добавлении новой ноды данные только в новый хост сливаются. между хостами данные гоняют конечно, при запросах/мап-пердьюсах и при временном выпадении ноды, другие берут на себя её запросы.

46. gdsrtsome /45 01.07.2012 01:41

почитал подробнее про этот механизм, читал тут: http://wiki.basho.com/Replication.html
"Changing the N value after a bucket has data in it is not recommended. If you do change the value, especially increasing it, you might need to force read repair. Overwritten objects and newly stored objects will automatically be replicated to the correct number of nodes."
Понятно, что при добавлении новой ноды без изменения "N value" нужно только 1/N данных гонять, но часто смысл добавления новой ноды не в надёжности, а в более чоткой параллелизации, потому и надо увеличивать "N value", и гоняться будет не 1/"old N value", а больше.

47. gdsrtsome /45 01.07.2012 04:14

не, я какую-то хуйню написал. Не в "N value" дело, а в чём-то другом. Но, всё же, проблема есть, и в случаях, когда добавляется новая нода для параллелизации/раскидывания данных по нодам, там не 1/n, жопой чую. Изучу подробнее, отпишу.

Do you really want to delete ?