metaclass: (Default)
[personal profile] metaclass
http://metaclass.livejournal.com/706440.html?thread=13096072#t13096072
Можно ли делать опердени не на RDBMS, не возвращаясь на уровень 70х годов, с иерархическими базами и прочими обработками на клиенте по курсорам?

Вариант "есть транзакции с ACID и есть оптимизированное по индексам выполнение filter/map/fold/reduce внутри базы" меня в принципе устроит. За исключением того, что SQL более лаконичен, вроде бы, если не делать внутри языка DSL аналогичный ему.


Например: select User_Name from Users where User_ID=?User_ID превращается во что-то вроде
let UserName UserID =
Users |> filter (fun u -> u.User_ID=UserID) |> map (fun u->u.User_Name) |> tryFirst

На LINQ же будет что-то вроде: from u in Users where u.User_ID=User_ID select u.User_Name

И все равно это же надо выполнять в СУБД, чтобы вся таблица не фетчилась на клиента или апп-сервер.

Date: 2012-07-01 09:36 am (UTC)
From: [identity profile] plumqqz.livejournal.com
Вы бы лучше о совершенстве луноликого думали. Все бы было больше пользы.

Date: 2012-07-01 09:44 am (UTC)
From: [identity profile] yantayga.livejournal.com
Луноликий - это кто?

Date: 2012-07-01 10:10 am (UTC)
From: [identity profile] metaclass.livejournal.com
Это обязаны знать все!

(no subject)

From: [identity profile] yantayga.livejournal.com - Date: 2012-07-01 10:14 am (UTC) - Expand

(no subject)

From: [identity profile] nealar.livejournal.com - Date: 2012-07-01 11:03 am (UTC) - Expand

(no subject)

From: [identity profile] yantayga.livejournal.com - Date: 2012-07-01 02:41 pm (UTC) - Expand

(no subject)

From: [identity profile] nealar.livejournal.com - Date: 2012-07-01 03:26 pm (UTC) - Expand

(no subject)

From: [identity profile] yantayga.livejournal.com - Date: 2012-07-01 03:33 pm (UTC) - Expand

(no subject)

From: [identity profile] nealar.livejournal.com - Date: 2012-07-01 04:39 pm (UTC) - Expand

(no subject)

From: [identity profile] yantayga.livejournal.com - Date: 2012-07-01 05:09 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-07-02 05:31 am (UTC) - Expand

Date: 2012-07-01 10:27 am (UTC)
From: [identity profile] nealar.livejournal.com
Нашли, чему завидовать.

Date: 2012-07-01 09:59 am (UTC)
From: [identity profile] si14.livejournal.com
Мне видится так:
-если это мелкое прототипное говнишко без сложных запросов, то монга только в путь. Можно даже утешать себя, что она «будет скейлиться».
-если нужны сложные запросы и данных меньше десятков (может быть сотен, но тут уже нужно напрягаться) гигабайт, то RDBMS это прелестно. Серьёзно, какой смысл изобретать велосипед? SQL отличный язык, работает всё быстро, все грабли, которые можно было, уже давно пройдены (по крайней мере если это постгря/мс/оракл, а не какой-нибудь файрбёрд, да).
-если данных уже сильно больше (сотни гигабайт) и много записи (потому что все приличные RDBMS умеют делать кластер с одним записывающим и пачкой отвечающих на чтение), то только тогда стоит думать обо всяких хадупах сотоварищи, потому что запросы писать будет ощутимо сложнее и поддерживать всё это тоже.
Ну и есть две маргинальные технологии не для всех случаев, использующие eventual consistency:
-CouchDB. Вкратце: хранятся иерархические документы а-ля JSON; на все ноды можно писать, со всех нод можно читать; во всех запросах на модификацию должна присутствовать старая версия документа, по ней сервер делает дельту и прицепляет к ней время; каждая нода делает паблиш всех таких дельт на все остальные ноды, из-за этого, с одной стороны, сильно уменьшается промежуток, в который можно прочитать «старые данные», а с другой нагрузка на ноды растёт линейно с количеством нод, поэтому кластеризация служит только для повышения надёжности, а не для улучшения скорости. Поэтому это крутая штука, которая реально «магически» работает со случаями вроде «у нас инстанс кауча на телефоне полностью автономный, делаем любые вообще модификации, подключаемся к сети и всё автоматически консистентно сливается, все конфликты разруливаются по принципу "кто последний тот и прав"». Проблема только в том, что это всё не рассчитано на сотни гигабайт данных и большие нагрузки, а сложные запросы можно делать только мапредьюсом на JS, что не очень круто и не очень быстро.
-Riak. Eventual consistency в дистиллированной форме; по сути это просто движок для CRDT (Commutative Replicated Data Types — типы данных, которые всегда можно слить между собой, независимо от порядка модификации. Например, set без операции удаления или логи — сколько бы нод отдельно друг от друга не писало, всегда можно слить между собой). При этом из коробки балансировка нод, балансировка между консистентностью записи, консистентностью чтения и latency, механизм для автоматического нахождения конфликтов (vector clocks). Хорошо масштабируется в смысле увеличения производительности от количества нод (впрочем, с помощью механизма балансировки консистентности можно сделать аналог кауча с гарантированной консистентностью — например, можно сделать операцию чтения не завершающейся до тех пор, пока все ноды не получат свою копию данных). Не очень хорошо со сложными запросами (снова MapReduce на JS). Есть из коробки индексирование по произвольным полям, но работает не очень. Соль же в том, что если данные являются CRDT (key-value c last writer wins, кстати, является CRDT), то всё будет работать очень круто и магически.

Date: 2012-07-01 10:10 am (UTC)
From: [identity profile] metaclass.livejournal.com
Риак выглядит привлекательно.

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-07-01 12:18 pm (UTC) - Expand

(no subject)

From: [identity profile] freiksenet.livejournal.com - Date: 2012-07-01 03:51 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-07-01 04:19 pm (UTC) - Expand

(no subject)

From: [identity profile] freiksenet.livejournal.com - Date: 2012-07-01 04:30 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-07-01 04:40 pm (UTC) - Expand

(no subject)

From: [identity profile] freiksenet.livejournal.com - Date: 2012-07-01 04:45 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-07-02 05:20 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-07-01 05:17 pm (UTC) - Expand

Date: 2012-07-01 12:21 pm (UTC)
From: [identity profile] dr-hyder.livejournal.com
Нэт, кауч развалится быстрее к хуям, ответственно заявляю. Riak - будет работаць и не жужжать.

(no subject)

From: [identity profile] si14.livejournal.com - Date: 2012-07-01 06:10 pm (UTC) - Expand

(no subject)

From: [identity profile] dr-hyder.livejournal.com - Date: 2012-07-01 06:13 pm (UTC) - Expand

Date: 2012-08-03 09:36 pm (UTC)
From: [identity profile] andrew kondratovich (from livejournal.com)
Риак был был конфеткой, если бы нормальные индексы запилили.

Date: 2012-07-01 10:25 am (UTC)
From: [identity profile] w00dy.livejournal.com
Ребе, вы ж в курсе о IQueryable. Если ваш линк провайдер умный, то он построит запрос и выполнит его в базе.

Date: 2012-07-01 10:46 am (UTC)
From: [identity profile] metaclass.livejournal.com
Видел я те запросы. Лучше бы их не было.

(no subject)

From: [identity profile] w00dy.livejournal.com - Date: 2012-07-01 10:54 am (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-07-01 10:55 am (UTC) - Expand

(no subject)

From: [identity profile] theiced.livejournal.com - Date: 2012-07-01 12:15 pm (UTC) - Expand

(no subject)

From: [identity profile] denisioru.livejournal.com - Date: 2012-07-01 03:12 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-07-01 04:18 pm (UTC) - Expand

(no subject)

From: [identity profile] w00dy.livejournal.com - Date: 2012-07-01 12:43 pm (UTC) - Expand

(no subject)

From: [identity profile] berezovsky.livejournal.com - Date: 2012-07-01 12:47 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-07-01 04:15 pm (UTC) - Expand

(no subject)

From: [identity profile] w00dy.livejournal.com - Date: 2012-07-01 10:02 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-07-01 10:30 pm (UTC) - Expand

Date: 2012-07-01 12:13 pm (UTC)
From: [identity profile] theiced.livejournal.com
ребе, вы вот тут чота рассуждаете, асид-хуясид. а между тем получили вендорлокин на файрбёрд - ВСЁ, все (фантомные) преимущества ушли сосать хуй.

Date: 2012-07-01 12:41 pm (UTC)
From: [identity profile] w00dy.livejournal.com
Вот кстати да. Откуда вообще ноги у файрбёрда растут? из делфей?

(no subject)

From: [identity profile] sergiej.livejournal.com - Date: 2012-07-01 02:14 pm (UTC) - Expand

(no subject)

From: [identity profile] fraks-nsk.livejournal.com - Date: 2012-07-01 02:52 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-07-01 04:14 pm (UTC) - Expand

(no subject)

From: [identity profile] freiksenet.livejournal.com - Date: 2012-07-01 04:54 pm (UTC) - Expand

(no subject)

From: [identity profile] w00dy.livejournal.com - Date: 2012-07-01 09:54 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-07-01 10:28 pm (UTC) - Expand

(no subject)

From: [identity profile] berezovsky.livejournal.com - Date: 2012-07-01 10:41 pm (UTC) - Expand

Date: 2012-07-01 12:21 pm (UTC)
From: [identity profile] avnik.livejournal.com
zodb же!
(serialized objects, btree, кровь, кишки, коровники прилагаются. Запросы на питоне)
Правда скейлится на кластер или rdbms backend'ом или за деньги.

Date: 2012-07-01 12:49 pm (UTC)
From: [identity profile] stdray.livejournal.com
А что за наязчивое желание избавится от RDBMS, я никак не пойму? Кривыми ОРМ или как?

Date: 2012-07-01 12:55 pm (UTC)
From: [identity profile] alexandr0.livejournal.com
Сейчас модно посредством nosql :)

Date: 2012-07-01 01:03 pm (UTC)
From: [identity profile] dr-hyder.livejournal.com
Народ осознал что ему в большинстве случаев нужен просто удобный storage с быстрыми простыми запросами и хорошей масштабируемостью. Реляционность это замечательно, но нафиг не нужна.

(no subject)

From: [identity profile] avnik.livejournal.com - Date: 2012-07-01 01:16 pm (UTC) - Expand

(no subject)

From: [identity profile] stdray.livejournal.com - Date: 2012-07-01 01:20 pm (UTC) - Expand

(no subject)

From: [identity profile] norguhtar.livejournal.com - Date: 2012-07-01 01:49 pm (UTC) - Expand

Date: 2012-07-01 04:16 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Да вот, айсед имеет такое мнение, пытаюсь понять, может я чего упустил и давно нужно опять опердени делать ручным суммированием отчетов через map-reduce.

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-07-01 04:43 pm (UTC) - Expand

(no subject)

From: [identity profile] metaclass.livejournal.com - Date: 2012-07-01 05:24 pm (UTC) - Expand

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-07-02 05:56 am (UTC) - Expand

Date: 2012-07-01 01:29 pm (UTC)
From: [identity profile] norguhtar.livejournal.com
Господя и вы туда же. Ну вот где-то год назад одни товарищи делали такую же вариацию. Типа ой это удобнее. В результате получите опять же тот же SQL вид в профиль. Вообще говоря текущая проблема вида используем ORM и т.п. подобное не более чем проблема текущей абстракции. Когда с одной стороны у нас есть объектный язык, а с другой стороны хранилище с декларативным доступом к данным. Попытки сделать объектные базы данных предпринимались еще до появления модного термина NoSQL. Тот же Cache. Только вот есть маленькая проблема. Как только доходили до такой вещи "а как бы нам там ловко получить аналитику?" возникал ад и коровники.

Date: 2012-07-01 01:58 pm (UTC)
From: [identity profile] guamoka.livejournal.com
Мои сугубо личные притензии к SQL - это отсутствие реюза. Точнее, внятной модели осуществления этого- оо, func, template. Вот надо из n таблиц выбрать 100500 вариантов по условиям и жоинам, соответственно, пиши 100500 запросов с 50%+ повторяющегося кода, или занимайся склейкой вручную или через какой ibatis. Причем, шансов, что очередная добавленная в запрос таблица родит такой план, что мама не горюй приближается к 100%.

Date: 2012-07-01 04:17 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Уже вообще решили - генерация из DSL. Нормальных, не дотнетовское LINQ-рукожопие.

(no subject)

From: [identity profile] nivanych.livejournal.com - Date: 2012-07-02 05:58 am (UTC) - Expand

Date: 2012-07-01 03:10 pm (UTC)
From: [identity profile] denisioru.livejournal.com
На LINQ можно сократить до users.First(p => p.User_ID=User_ID).Name

Date: 2012-07-01 03:27 pm (UTC)
From: [identity profile] stdray.livejournal.com
ага, тут еще надо блок try-catch и еще один знак "="

(no subject)

From: [identity profile] denisioru.livejournal.com - Date: 2012-07-01 03:39 pm (UTC) - Expand

Date: 2012-07-02 05:24 am (UTC)
From: [identity profile] blackyblack.livejournal.com
Уже выяснили же, что ничего такого нет в природе. И ребе обязался СУБД на хаскеле написать с блэкджеком и мэпредюсом.

Date: 2012-07-02 06:16 am (UTC)
From: [identity profile] smalgin.livejournal.com
Если найдете, поделитесь. Будет интересно сравнить ощущения.

Date: 2012-07-02 09:37 am (UTC)
From: [identity profile] thesz.livejournal.com
>И все равно это же надо выполнять в СУБД, чтобы вся таблица не фетчилась на клиента или апп-сервер.

Товарищи примером показали, что это единственный выход: http://cs-www.cs.yale.edu/homes/dna/papers/calvin-sigmod12.pdf

(смогли добиться производительности рекордсменов TPC на железе, в тысячи раз более дешёвом)

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 19th, 2025 06:12 am
Powered by Dreamwidth Studios