
Alex
17.10.2016
12:23:21
зависит от движка
есть инмемори есть не инмемори

Yury
17.10.2016
12:24:14
о да, ещё одна путаница - по первой, кроме Mongo многие другие БД (как правило key-value), типо Redis, Memcached и т.д. были in-memory и их так же называли noSQL и некотрые думают, что если in-memory то это noSQL.
зависит от движка
я не знал что у Тарантула несколько движков. Всегда думал про него как про in-memory СУБД.

Google

Alex
17.10.2016
12:25:08
а PipelineDB это SQL или нет ? :)

Yury
17.10.2016
12:28:42
а PipelineDB это SQL или нет ? :)
трудно сказать что такое SQL бд, кроме того что эта БД должна подерживать язык запросов SQL.
С другой стороны noSQL как правило не подерживает такой язык и при этом не операется на реалиционную теорию.
Но сейчас MongoDB вроде имеет SQL адаптер и... по хорошему такую БД можно назвать SQL и одновременно noSQL.
Но честно говоря я бы этот термин викинул нафиг.
Лучше использовать РСУБД и документо ориентированная и key-value. БД может имееть эти свойства в разных пропорциях и к этому добавляется списко языков запросов.
ЗЫ mysql имеет не только SQL интерфейс.
Google BigData имеет почти SQL интерфейс но там нету join...

Alex
17.10.2016
12:30:26
а тарантул тогда что ? :) оно и не кей велью и не документо ориентированная... так кортежи на диск сложить с индексами
или в память.. это уж как захочется =)

Yury
17.10.2016
12:30:52
а у тарантула есть WAL?

Alex
17.10.2016
12:32:00
есть у них и WAL и репликации и еще всякое

Fike
17.10.2016
12:32:45

Yury
17.10.2016
12:33:43

Fike
17.10.2016
12:34:49

Google

Yury
17.10.2016
12:37:42
если так всё плохо, то зачем им пользуются?

Fike
17.10.2016
12:38:31
у меня всегда возникает тот же вопрос (и отдельно замечу, что количество пользователей не может быть аргументом о качестве продукта)

Yury
17.10.2016
12:38:54
Ну для меня redis это memcached на стероидах
стероиды тут это фичи

Pavel
17.10.2016
12:39:20
А зачем пользуются memcache если есть redis ?

Vadim
17.10.2016
12:39:31

Fike
17.10.2016
12:41:00
Да, интерфейс с точки зрения использования у него вполне приятный, еще бы удалить пересечения ключей по типам, и было бы вообще ок (чтобы я не мог случайно запросить хэш по ключу, по которому валяется инт). Но с точки зрения гарантий, предоставляемых клиенту - он вообще нулевой. Я не вижу для него юзкейсов кроме деревянного kv-кэша с таймаутами на стороне приложения.

Alex
17.10.2016
12:41:51

Yury
17.10.2016
12:41:55
к слову что написанно на сайте Redis по поводу single-thread:
It's very unlikely that CPU becomes your bottleneck with Redis, as usually Redis is either memory or network bound. For instance, using pipelining Redis running on an average Linux system can deliver even 500k requests per second, so if your application mainly uses O(N) or O(log(N)) commands, it is hardly going to use too much CPU.

Pavel
17.10.2016
12:43:38
Зачем пользовать редис если есть тарантул ? :)
Справедливое замечание. Ну во-первых потому что когда тарантула еще не было редис уже был широко распространен. Во-вторых, потому что по редису экспертизы и доков больше. В остальном, если по бенчмаркам будет одинаково или лучше, то не вижу смысла в редисе при наличии тарантула

Fike
17.10.2016
12:44:04
antirez (автор редиса) очень часто полагается на такие утверждения, не предпринимая попыток продумать ситуацию "от обратного" (i.e. если все-таки процессор почему-то залип - здесь были бы добавлены таймауты операций), в результате чего и имеем то, что имеем. И про 17 секунд - это действительно реальный кейс, хоть и не у меня, а у человека, который запросил помощи. При этом никаких lua-скриптов у него внутри не было.

Yury
17.10.2016
12:44:23


Fike
17.10.2016
12:47:06
А мы так и не выяснили тогда причину (лол). Он действительно мог самостоятельно набедокурить в объеме данных, другое дело, что ни одно другое хранилище не позволяет одному запросу устроить DOS.

Darafei
17.10.2016
12:49:50
ой да ладно
постгрес складывается на ура

Dmitrii
17.10.2016
14:16:06
А если я выбираю значение по алиасу в селекте целиком, есть какая-то возможность потом обратиться к полю по его имени? (наверное непонятно написал)

Darafei
17.10.2016
14:17:56
select ab from (select a.* from table a) ?

Dmitrii
17.10.2016
14:18:48
Наверное я не тем путем пошел. Похоже курсор в процедуре решит проблему.

Alex
17.10.2016
14:20:20
мсье склонен выражаться понятными ему только фразами

Google

Dmitrii
17.10.2016
14:21:28
На самом деле, я тут недавно спрашивал про создание дочерней базы из основной базы с коском данных из нее, мне тут подсказали ETL. Все хорошо, но получилось что сам ETL оверкил для меня
А это все куски той же истории. Сейчас у меня есть 2 таблицы, и при выборке (T) из двух таблиц объединенных мне надо ререшить из какого поля брать данные. Очевидно что в SELECT всю ее не описать, и надо писать хранимку какую то

Alex
17.10.2016
14:23:47
CASE ?

Dmitrii
17.10.2016
14:24:37
И вот теперь к вопросу выше — в храниму надо как то передавать строку результат запроса, чтобы я мог вернуть необходимое значение, только функция эта должна быть минимально зависима от полей, которые в те таблицы откуда выбираю могут добавить. Т.е. по индексам добираться до них нельзя
которые в те таблицы могут добавить*

Darafei
17.10.2016
14:25:31
SQL хорошо развивает структурное мышление

Dmitrii
17.10.2016
14:26:34
Т.е. если провести параллель с каким-нибудь ЯП, то мне надо в функции получить ссылку на строку.

Darafei
17.10.2016
14:26:42
зачем?

Dmitrii
17.10.2016
14:26:44
Чтобы работать с ее полями.
По имени
Это функция будет некий "геттер"

Alex
17.10.2016
14:27:11
тип RECORD ?
я понял, это такая викторина телепатическая для погресистов )

Dmitrii
17.10.2016
14:27:40
Возвращаемый? Нет. Зависит от того, с каким полем работаю.

Andrey
17.10.2016
14:27:42
Дмитрий. По-моему, вы всё усложняете. Похоже, что проблема на самом деле в архитектуре.

Dmitrii
17.10.2016
14:28:03
Не совсем понятно, при чем здесь архитектура

Darafei
17.10.2016
14:28:18
что мешает написать этот геттер прямо в запросе?
зачем там функция?

Dmitrii
17.10.2016
14:28:29
Потому что там логики на 100 строк будет

Google

Dmitrii
17.10.2016
14:28:39
Никто не сможет это поддерживать
Если оно прямо в запросе будет

Alex
17.10.2016
14:28:47
помоему человек искренне хочет Entity Attribute Value модель, но не знает что это такое

Dmitrii
17.10.2016
14:29:01
Нет. Это не EAV.
Представьте, что вы можете наследовать строки в базе.

Andrey
17.10.2016
14:29:33
При том, что если вам приходится использовать некрасивые решения для того, чтобы сделать простую вещь, то, возможно, вы либо данные не так храните, либо архитектура всего решения спроектирована неправильно.

Alex
17.10.2016
14:29:43
может тогда яснее выражаться ? :)

Darafei
17.10.2016
14:30:19

Andrey
17.10.2016
14:30:19
Вообще было бы нелохо, если бы вы поподробнее описали суть задачи. На более высоком уровне.

Admin
ERROR: S client not available

Dmitrii
17.10.2016
14:30:31
Если у родителя нет детей, то надо возвратить значение поля от родителя, если детки есть, то по определенным правилам надо вернуть значение ребетка

Darafei
17.10.2016
14:30:45
это coalesce в чистом виде

Andrey
17.10.2016
14:31:03

Dmitrii
17.10.2016
14:31:18
Обычный coalesce сюда не впихнуть, к сожалению.

Darafei
17.10.2016
14:31:39
почему?

Alex
17.10.2016
14:31:49
WITH RECURSIVE ?

Dmitrii
17.10.2016
14:31:59
Я там выше написал, что логики в функции будет строк на 100

Darafei
17.10.2016
14:31:59
незаполненность выглядит не как null?

Dmitrii
17.10.2016
14:32:18
Там не только нал не нал

Darafei
17.10.2016
14:32:37
окей, а что ещё?

Google

Alex
17.10.2016
14:33:08
а призы будут ? :)

Dmitrii
17.10.2016
14:33:16
Решения надо принимать на основе наличия записей в других таблицах, и их значениях
И на основе них решать откуда в итоге брать значение. Из родителя или из чилда

Andrey
17.10.2016
14:34:15
Что-то мне подсказывает, что в таком виде это всё будет не очень быстро работать.

Alex
17.10.2016
14:34:31
а если сделать вью по тем данным на которым делать выборку и сджойнить ?

Dmitrii
17.10.2016
14:34:32
Это не имеет значения
Операция для запуска в фоне для восстановления

Alex
17.10.2016
14:34:54
и в чем проблема написать 100 строк логики ?

Dmitrii
17.10.2016
14:37:47
Так вопрос то был не как написать 100 строк логики ) А как обращаться к строке по имени поля в процедуре

Andrey
17.10.2016
14:38:35
Может, динамический SQL?

Dmitrii
17.10.2016
14:38:47
Т.е. я пишу SELECT al FROM table al и оно возвращает мне что то типа {1, foobar}

Alex
17.10.2016
14:38:54
ну ты же строку откуда то получаешь ?
сложи в RECORD

Dmitrii
17.10.2016
14:39:04
Т.е. здесь видно, что имена полей потеряны. И если кто-то вставит колонку то все

Alex
17.10.2016
14:39:16
и обращайся к ним
нет ?

Andrey
17.10.2016
14:39:28
То, что вы хотите, можно на plpython написать )

Dmitrii
17.10.2016
14:39:42
Типа сделать type cast в RECORD?
Такое возможно?

Alex
17.10.2016
14:40:07
я так не пробовал.

Dmitrii
17.10.2016
14:40:49
Щас попоробую этот вариант.