metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2013-04-28 11:45 pm

Кложурь это новый SQL или "нам гамон"

http://justy-tylor.livejournal.com/205808.html?thread=873456#t873456 "глупо ожидать удобства от древнего бухгалтерского DSL в двадцать первом веке." - это про SQL, который изначально вообще задумывался вроде для разного рода бухгалтеров и экономистов, но они "не осилили".

Я вот думаю, что Clojure на роль бухгалтерского DSL подходит гораздо лучше :)

[identity profile] falcrum.livejournal.com 2013-04-28 08:54 pm (UTC)(link)
Угу. Не осилили квадратные уравнения - дадим дифуры: тут-то и попрёт! :)

[identity profile] metaclass.livejournal.com 2013-04-28 09:06 pm (UTC)(link)
Ай, все что делается в стиле "пользователь будет сам программировать" - никогда не работает и всегда заканчивается появлением новой специализации программистов.
Даже если работодатель потребует от бухгалтеров умения программировать (что им очень сильно бы облегчило жизнь) - это кончится тем, что такие бухгалтера сбегут к вендорам бухгалтерского софта на гораздо большую зарплату.

[identity profile] theiced.livejournal.com 2013-04-28 09:11 pm (UTC)(link)
да. вон же давеча был хороший пример с ортуреговым стартапом же :) айсед сразу сказал - ХУЙ и так оно и получилось.

[identity profile] plumqqz.livejournal.com 2013-04-29 05:23 am (UTC)(link)
1. А чем вас джойн по строке расстраивает?
2. Вариант с датой рождения имеет право на сущестование - можно даже регион воткнуть. Другое дело, что верить ему нельзя
3. Таарищ не понимает, что sql такой, какой он есть не потому, что кому-то так захотелось, но потому, что иначе не получилось. Нет, можно, конечно, синтаксически переразметить, но суть от этого не изменится.

UPD С айдюком, кстати, правильно - кроме общего хинта, когда, скорее всего,родился персонаж можно иметь конкретное место и дату выдачи и выдавшего.
Edited 2013-04-29 05:26 (UTC)

[identity profile] vp.livejournal.com 2013-04-29 06:03 am (UTC)(link)
Что за стартап?

[identity profile] bydl0coder.livejournal.com 2013-04-29 07:01 am (UTC)(link)
3. От SQL не хватает группировки типа "по неделям и итог по каждому месяцу". Остальное все отлично.

[identity profile] plumqqz.livejournal.com 2013-04-29 07:11 am (UTC)(link)
Ну что уж тут поделаешь, раз не хватает.

[identity profile] metaclass.livejournal.com 2013-04-29 07:14 am (UTC)(link)
Размеры индексов меня немного печалят, если там строка вместо числа. И сравнение строк тоже занятие небыстрое.

[identity profile] plumqqz.livejournal.com 2013-04-29 07:24 am (UTC)(link)
Ну, есть такое. Но заводить еще одну колонку и строить на нее дополнительный индекс...
Относительно сравнения строк - не все так плохо.

[identity profile] veter-r-r.livejournal.com 2013-04-29 08:08 am (UTC)(link)
Только джаваскрипт! Только хардкор!

[identity profile] berezovsky.livejournal.com 2013-04-29 08:09 am (UTC)(link)
Исполнитель "Чертёжник".

[identity profile] veter-r-r.livejournal.com 2013-04-29 08:10 am (UTC)(link)
Это для тех, кто не осилил Кенгуренка?

[identity profile] theiced.livejournal.com 2013-04-29 08:12 am (UTC)(link)
тулза-для-манагеров-шоп-они-могли-делать-мобильные-приложения-прямо-из-браузера

[identity profile] vp.livejournal.com 2013-04-29 08:16 am (UTC)(link)
Да-да, это всегда срабатывало :))

[identity profile] berezovsky.livejournal.com 2013-04-29 08:23 am (UTC)(link)
А чё за кенгурятник?

[identity profile] nivanych.livejournal.com 2013-04-29 08:28 am (UTC)(link)
Скажите, а как у вас проявляется эта нехватка?
Сильно ли она вас беспокоит по ночам?

[identity profile] bydl0coder.livejournal.com 2013-04-29 09:36 am (UTC)(link)
Так как это айдишник, то range операций не будет и можно хэш-индекс иметь.

[identity profile] bydl0coder.livejournal.com 2013-04-29 09:44 am (UTC)(link)
Проявляется в том, что нужно делать группировку на клиенте, а она, во-первых, на мейнстримных языках выглядит очень плохо, а во-вторых, логика размазывается по клиенту и базе. Из базы надо либо совсем сырые данные брать либо уже готовое все.

[identity profile] plumqqz.livejournal.com 2013-04-29 10:03 am (UTC)(link)
Ну хеш, это, ясное дело, чудесное средство и волшебная палочка. От него сразу становится как-то необыкновенно хорошо.
Непонятно, правда, какие именно догматы мешают считать хеш от строки, раз уж в нем кроются такие радости.
А вот в "range операциях"..., ах, да бог с ними.

[identity profile] bydl0coder.livejournal.com 2013-04-29 10:27 am (UTC)(link)
Ну не я ж волновался за размеры индексов.

[identity profile] plumqqz.livejournal.com 2013-04-29 10:30 am (UTC)(link)
А причем тут размеры индексов?

[identity profile] berezovsky.livejournal.com 2013-04-29 10:35 am (UTC)(link)
Какая прелесть. :-))

[identity profile] bydl0coder.livejournal.com 2013-04-29 10:42 am (UTC)(link)
А они не меньше деревьев получаются? Хотя можно и без извратов с типами индексов, а в дерево положить свой хэш, если уж памяти мало.

[identity profile] nivanych.livejournal.com 2013-04-29 10:42 am (UTC)(link)
Что это за SQL у вас такой?

[identity profile] bydl0coder.livejournal.com 2013-04-29 10:43 am (UTC)(link)
Блядь, тут кто-нибудь нормально разговаривать умеет?

[identity profile] plumqqz.livejournal.com 2013-04-29 10:45 am (UTC)(link)
Да вообще-то не особо, если даже и меньше.

[identity profile] nivanych.livejournal.com 2013-04-29 10:47 am (UTC)(link)
Хорошо. Скажу нормально.
Читайте доки бля!

[identity profile] bydl0coder.livejournal.com 2013-04-29 10:58 am (UTC)(link)
можно ли без извратов получить от базы такое:

month | item |amount
---------------------
01.13 | guns | 100
01.13 | butter | 150
null | null | 250
02.13 | guns | 50
02.13 | butter | 70
null | null | 120

[identity profile] nivanych.livejournal.com 2013-04-29 11:08 am (UTC)(link)
Смотря что вы считаете извратами.
Можно получить при помощи SQL.
http://www.postgresql.org/docs/devel/static/tutorial-window.html

[identity profile] bydl0coder.livejournal.com 2013-04-29 11:11 am (UTC)(link)
Получить, да не то.

[identity profile] metaclass.livejournal.com 2013-04-29 11:15 am (UTC)(link)
Можно. Что-то вроде
select * from
(select month,1 k, item, sum(amount) from Items
group by 1,2,3
union
select month,2 k, '', sum(amount) from items
group by 1,2,3
) order by month,k

ну или помудрить с CTE, чтобы два раза не вставать к основной таблице.

[identity profile] nivanych.livejournal.com 2013-04-29 11:23 am (UTC)(link)
Ога. Не то. Там цЫферки другие написаны.
Надо-то что? Группировки типа "по неделям и итог по каждому месяцу"?
И в каком именно SQL? Поцгрес подойдёт?
http://www.postgresql.org/docs/devel/static/functions-datetime.html
Возможно, из приведённой вами гипотетической выборки из базы и можно догадаться в точности, что именно вам нужно, но я этого делать не буду.

[identity profile] anonim-legion.livejournal.com 2013-04-29 03:55 pm (UTC)(link)
Дайте исходные данные, я вам запрос напишу.

[identity profile] bydl0coder.livejournal.com 2013-04-29 03:56 pm (UTC)(link)
Циферки те, да не там.

[identity profile] bydl0coder.livejournal.com 2013-04-29 04:22 pm (UTC)(link)
http://sqlfiddle.com/#!1/e390c/1

Написанный там запрос делает не то, что надо. Надо, чтобы итог за месяц был под итогом по товарам.

[identity profile] bydl0coder.livejournal.com 2013-04-29 04:24 pm (UTC)(link)
и так двенадцать раз, ага.

[identity profile] ext-1741091.livejournal.com (from livejournal.com) 2013-04-29 05:39 pm (UTC)(link)
Отлишная, между прочим, весчъ! Там еще пылесосик был - стековая машина.

[identity profile] metaclass.livejournal.com 2013-04-29 06:22 pm (UTC)(link)
см, ссылку на fiddle

[identity profile] bydl0coder.livejournal.com 2013-04-29 07:07 pm (UTC)(link)
Вот я лох. Но проблемы видны, в общем.

[identity profile] metaclass.livejournal.com 2013-04-29 07:13 pm (UTC)(link)
Да, если требования чуть сложнее - sql превращается в тыкву.
В итоге, один запрос с аггрегацией я делаю на SQL а всю постобработку типа "показать итоги до, после, сверху, сбоку, спереди и сзади" - на Clojure.

[identity profile] bydl0coder.livejournal.com 2013-04-29 09:48 pm (UTC)(link)
Я тоже так делаю, но в сишарпе получаются ебанутейшие типы, да и в рубях тоже не особо приятно map'ы разбирать. В Clojure какой-то крутой синстаксис для мапов, насколько я понимаю.