Re[34]: cppcms
От: Sheridan Россия  
Дата: 24.09.14 03:43
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Ок. Откуда берутся данные? Вот по полочкам разложи, как из этого собирается запрос, как исполняется, откуда берется user и как у него вырастает FirstName, которое становится строкой и склеивается со всем остальным.

S>>а я с удовольствием послушаю.

НС>Все просто. Этот запрос компилируется примерно в такой код:

НС>
НС>string Lambda(string p1, string p2)
НС>{
НС>  return "<div><span>" + p1 + "</span><span>" + p2 + "</span></div>";
НС>}

НС>IEnumerable<string> GetUsers(IDbConnection con)
НС>{
НС>    using (var cmd = conn.CreateCommand())
НС>    {
НС>        cmd.CommandText = "SELECT FirstName, LastName FROM User WHERE IsActive=1";
НС>        using (var rdr = cmd.ExecuteReader())
НС>            while (rdr.Read())
НС>                yield return Lambda(Convert.ToString(rdr[0]), Convert.ToString(rdr[1]));
НС>    }
НС>}
НС>

Только что у тебя было user.FirstName и внезапно остался только string с именем?
Только что GetUsers у тебя принимало параметром чтототам и внезапно оно принимает коннект к БД?

НС>>>Сколько терпеть то? Полгода?

S>>Ты мне сроки ставишь?
НС>Нет, я у тебя о сроках спрашиваю. Что то у тебя парсинг русского барахлит.
То есть ты другой тип начальника — требуешь чтобы я сам себе сроки поставил?
Matrix has you...
Re[22]: cppcms
От: Sheridan Россия  
Дата: 24.09.14 03:49
Оценка:
Здравствуйте, alex_public, Вы писали:

P>>>Ты в своем проекте, по крайней мере, не думаешь про рисование окон и доступ к БД.

S>>Ну, мне не понравился cppdb и pqxx, нарисовал свою обёртку над pqxx...
_>Для доступа к БД из C++ могу посоветовать использовать SOCI. Очень удобный и мощный инструмент.
Я рассматривал его. Предпочел постгресную либу вместо комбайна, ибо с постгреса съезжать не планирую
А вообще, в генту интересное описание пакета

dev-db/soci A db access library for C++ that makes the illusion of embedding SQL queries in the regular C++ code


S>>Вот и я об чём. А мой проект будет вполне себе работать на raspberry pi, при условии конечно что БД будет на нормальном сервере.

S>>Иными словами я смогу разделить бюджет на железо не поровну между сервером приложения и сервером БД, а взять действительно мощный сервер для БД, а приложение запустить на чем то попроще.
_>А были тесты, что скажем реализация на Python не справится с той же самой задачкой на малинке? )
Справится даже баш. Вопрос в другом — какую нагрузку выдержит. Я не тестировал

_>P.S. Я как раз C++'ик, если что. ))) Но для данной задачки (я так понял что речь идёт о простейшей вебморде к БД, причём внутрикорпоративной, т.е. без особой нагрузки) я бы в начале всё же попробовал менее мощные средства с более простой разработкой.

Мне интересно именно на с++
Matrix has you...
Re[23]: cppcms
От: Evgeny.Panasyuk Россия  
Дата: 24.09.14 04:09
Оценка:
Здравствуйте, Sheridan, Вы писали:

_>>Для доступа к БД из C++ могу посоветовать использовать SOCI. Очень удобный и мощный инструмент.

S>Я рассматривал его. Предпочел постгресную либу вместо комбайна, ибо с постгреса съезжать не планирую

Как вариант, посмотри ещё ODB, но это уже ORM.
Re[23]: cppcms
От: alex_public  
Дата: 24.09.14 04:28
Оценка: 1 (1)
Здравствуйте, Sheridan, Вы писали:

S>Я рассматривал его. Предпочел постгресную либу вместо комбайна, ибо с постгреса съезжать не планирую


Я бы не стал так зарекаться. Кстати, при реально слабых нагрузках тот же sqlite может быть более удобным решением. А потом (при повышение нагрузки) можно и на postgress. Причём в случае SOCI изменения будет в одну строчку.

Ну а вообще SOCI хороша не только своим универсальным доступом, но и просто удобна.

S>А вообще, в генту интересное описание пакета

S>

dev-db/soci A db access library for C++ that makes the illusion of embedding SQL queries in the regular C++ code


Забавное описание. Кстати, здесь http://rsdn.ru/forum/philosophy/5367843
Автор: Ikemefula
Дата: 19.11.13
(и дальше по ветке) было небольшое обсуждение с примерами от меня (в том числе и на тему ORM).

_>>А были тесты, что скажем реализация на Python не справится с той же самой задачкой на малинке? )

S>Справится даже баш. Вопрос в другом — какую нагрузку выдержит. Я не тестировал

Ну так а вдруг и Python потянет нужную нагрузку даже на слабом железе?) Тогда же будет не особо оправдано использовать такой мощный, но при этом совсем не простой инструмент как C++.

S>Мне интересно именно на с++


Нууу если только в качестве интереса... Кстати, советую тогда ещё глянуть например сюда http://vibed.org — здесь оптимизации не сильно отличается от C++ варианта, но при этом удобство разработки и модификации значительно выше.
Re[27]: cppcms
От: Privalov  
Дата: 24.09.14 05:17
Оценка:
Здравствуйте, Sheridan, Вы писали:

P>>Ну да, те, кто сами не умеют, с большой охотой учат других.


S>А разве в реальном мире не так?


Вообще-то я только о реальном мире и говорил.
Re[31]: cppcms
От: Privalov  
Дата: 24.09.14 05:25
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Это значит, что все что мне говорили ранее, типа "код ничто — запросы к БД и в сеть основной тормоз" — лукавство?


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

S>Гигабайты конечно никто пока еще не вытаскивает, но вот перелопатить гигабайты в поиске пары строк — вполне себе будет.


Вот именно. Учти еще, что в принципе база данных может быть где угодно в пространстве. У тебя определена только точка доступа. Так что если ты сидишь на Черном море, а БД — на Белом, то результата придется подождать.
Отредактировано 24.09.2014 5:35 Privalov . Предыдущая версия .
Re[31]: cppcms
От: Privalov  
Дата: 24.09.14 05:28
Оценка: +1 :)
Здравствуйте, Sheridan, Вы писали:

P>>У тебя — нет. А у конторы, где ты работаешь — есть. А то, что ты на нее бесплатно работаешь — проблема твоя, а не ее.

S>Мне платят деньги за другое. А программирование — хобби.

Но ты же берешься что-то программировать для своей конторы? Значит, сотрудники на тебя рассчитывают, а ты их подводишь. Отсюда у них убытки. А ты их не видишь, поскольку они не у тебя.
Re[24]: cppcms
От: Privalov  
Дата: 24.09.14 05:31
Оценка: :)
Здравствуйте, alex_public, Вы писали:

_>Ну так а вдруг и Python потянет нужную нагрузку даже на слабом железе?


Питон в печку © Sheridan
Re[25]: cppcms
От: Privalov  
Дата: 24.09.14 05:34
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Ты случаем не пытаешься выразить утверждение в том что не программист шеридан — не программист? о0

S>

Это ты где такое взял? Прочитал между строк? Это не ко мне. Я ничего между строк не писал.

Ты в самом деле не видишь разницу между инструментом и результатом работы?
Re[32]: cppcms
От: Sheridan Россия  
Дата: 24.09.14 05:57
Оценка:
Здравствуйте, Privalov, Вы писали:

S>>Это значит, что все что мне говорили ранее, типа "код ничто — запросы к БД и в сеть основной тормоз" — лукавство?

P>Почему лукавство? Вовсе нет. Правильно тебе говорили. Мой опыт тоже это подтверждает.
Это
Автор: genre
Дата: 23.09.14
тогда к чему?..

S>>Гигабайты конечно никто пока еще не вытаскивает, но вот перелопатить гигабайты в поиске пары строк — вполне себе будет.

P>Вот именно. Учти еще, что в принципе база данных может быть где угодно в пространстве. У тебя определена только точка доступа. Так что если ты сидишь на Черном море, а БД — на Белом, то результата придется подождать.
У меня не настолько глобально. Максимум — на соседнем сервере в стойке
Matrix has you...
Re[32]: cppcms
От: Sheridan Россия  
Дата: 24.09.14 05:58
Оценка:
Здравствуйте, Privalov, Вы писали:

P>>>У тебя — нет. А у конторы, где ты работаешь — есть. А то, что ты на нее бесплатно работаешь — проблема твоя, а не ее.

S>>Мне платят деньги за другое. А программирование — хобби.
P>Но ты же берешься что-то программировать для своей конторы? Значит, сотрудники на тебя рассчитывают, а ты их подводишь. Отсюда у них убытки. А ты их не видишь, поскольку они не у тебя.
Еще раз говорю — денег в этом уравнении нет. Все прекрасно понимают когда и как я это пишу, соответственно и ожидания соответствующие.
Matrix has you...
Re[26]: cppcms
От: Sheridan Россия  
Дата: 24.09.14 06:00
Оценка:
Здравствуйте, Privalov, Вы писали:

S>>Ты случаем не пытаешься выразить утверждение в том что не программист шеридан — не программист? о0

P>Это ты где такое взял? Прочитал между строк? Это не ко мне. Я ничего между строк не писал.
Тут весь тред к этому сводится так или иначе. То язык неправильный выбрал, то строки неправильно клею, то "запили тесты", то "составь запрос к БД"...

P>Ты в самом деле не видишь разницу между инструментом и результатом работы?

Вижу
Matrix has you...
Re[30]: cppcms
От: artelk  
Дата: 24.09.14 06:02
Оценка: -1
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, artelk, Вы писали:


A>>Лапша из колбэков?


_>Можно глянуть здесь http://www.boost.org/doc/libs/1_56_0/doc/html/boost_asio/examples/cpp11_examples.html ) Например на async_tcp_echo_server для простоты.

Лапша из колбэков.

_>А в самом низу там есть ещё и пример на базе сопрограмм.

В одном рабочем потоке?
Re[28]: cppcms
От: artelk  
Дата: 24.09.14 06:12
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Здравствуйте, artelk, Вы писали:


A>>Boost.coroutine не предлагать — оно однопоточное.


EP>О чём речь? LIVE DEMO

EP>Вывод:
EP>
EP>Thread ID 139987868124992 in main begin
EP>Thread ID 139987838420736 in coro begin
EP>Thread ID 139987868124992 in coro end
EP>Thread ID 139987868124992 in main end
EP>

EP>

Запускающий поток держится, чтобы управление вернулось именно в него.
В сервисе это нафиг не нужно (в UI да, нужно). Запускающий поток там — это один из потоков пула (т.н. worker thread или iocp thread).
Т.е. хотелось бы, чтобы yield() из примера отпускал поток обратно в пул, а после yield() управление мог взять любой другой поток пула.
Re[33]: cppcms
От: Privalov  
Дата: 24.09.14 06:17
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

P>>Почему лукавство? Вовсе нет. Правильно тебе говорили. Мой опыт тоже это подтверждает.

S>Это
Автор: genre
Дата: 23.09.14
тогда к чему?..


К тому, что ты не знаешь заранее, во что упрешься. К тому же тут возможны варианты. Например, данные выводятся медленно по вине БД, а не клиента. А вот если с БД все нормально, тогда клиент (обычно это MiddleWare) может задохнуться, принимая данные. И в этом случае наиболее дешевое и разумное решение — поставить рядом такой же аппарат с такой же софтиной. Но в софтине такой вариант должен быть предусмотрен. И это ни фига не преждевременная оптимизация. Это совершенно штатная ситуация.

Вообще-то тебе удалось в этот раз сбить меня с толку. Я знал, что ты тролль. Сначала-то речь шла о приеме из БД 100500 гигов данных. В этом случае все, скорее всего свалится до начала обработки, соответственно в процессор ты не упрешься. Потом меня отвлекли по работе , и я кое-что пропустил. В случае, когда мы уперлись в БД, это была медленная БД.

Так что да, при нормальной БД ты упрешься в производительность своего приложения гораздо раньше.

S>У меня не настолько глобально. Максимум — на соседнем сервере в стойке


Тогда тем более. БД — шустрая, значит, будь готов.
Re[27]: cppcms
От: Privalov  
Дата: 24.09.14 06:27
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>Тут весь тред к этому сводится так или иначе. То язык неправильный выбрал, то строки неправильно клею, то "запили тесты", то "составь запрос к БД"...


А как без тестов-то? У тебя что, все праильно по определению? Время реакции сервера, время генерации страницы? О багах я вообще не упоминаю.

P>>Ты в самом деле не видишь разницу между инструментом и результатом работы?

S>Вижу

А тут меня уверяют что с++ и 200 запросов\с не выдержит.


Говорил? А C++ и не должен ничего выдерживать. Это всего лишь язык.
Re[28]: cppcms
От: Sheridan Россия  
Дата: 24.09.14 06:29
Оценка:
Здравствуйте, Privalov, Вы писали:

S>>Тут весь тред к этому сводится так или иначе. То язык неправильный выбрал, то строки неправильно клею, то "запили тесты", то "составь запрос к БД"...

P>А как без тестов-то? У тебя что, все праильно по определению? Время реакции сервера, время генерации страницы? О багах я вообще не упоминаю.
По тестам с натяжкой соглашусь. Остальное?

P>>>Ты в самом деле не видишь разницу между инструментом и результатом работы?

S>>Вижу
P>

А тут меня уверяют что с++ и 200 запросов\с не выдержит.

P>Говорил? А C++ и не должен ничего выдерживать. Это всего лишь язык.
Все всегда воспринимают всё буквально? Контекст то про cppcms, о чем заголовок топика как бы намекает...
Matrix has you...
Re[24]: cppcms
От: PM  
Дата: 24.09.14 06:41
Оценка: 2 (1) +1
Здравствуйте, alex_public, Вы писали:

_>Ну а вообще SOCI хороша не только своим универсальным доступом, но и просто удобна.


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

Я на SOCI начал смотреть ещё лет 10 назад, еще когда она только была написана одним человеком Maciej Sobczak. В то время мне нужно было хранить данные в SQLite, но SOCI была только только Simple wrapper для Oracle Call Interface, откуда и происходит ее название. Пришлось делать https://github.com/pmed/sqlitepp

Пару лет назад (когда опять понадобилось возиться с БД из С++) я снова взглянул на SOCI. Автор давно потерял к ней интерес, так что теперь это типичный community open source продукт, с кучей разработчиков и странным (естественно только на мой взгляд) кодом в mysql и postgres backends.

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

По теме: у cppCMS безусловно есть своя ниша, там же собственно где и у С++ в 2014 году — где есть ограничения на производительность и(или) энергопотребление. Ваять очередной опердень или сайт с котиками на cppCMS явно не стоит, а у гугла и фейсбука хватает ресурсов на свои продукты.

У автора cppCMS или дофига времени, или синдром NIH, судя по namespace booster. Но надо отдать ему должное за создание Boost.Locale

А Шеридан забивает гвозди микроскопом. Ну раз ему этого хочется, почему бы и нет, если это хобби
Re[29]: cppcms
От: Evgeny.Panasyuk Россия  
Дата: 24.09.14 06:48
Оценка:
Здравствуйте, artelk, Вы писали:

EP>>Вывод:

EP>>
EP>>Thread ID 139987868124992 in main begin
EP>>Thread ID 139987838420736 in coro begin
EP>>Thread ID 139987868124992 in coro end
EP>>Thread ID 139987868124992 in main end
EP>>

EP>>
A>Запускающий поток держится, чтобы управление вернулось именно в него.

Пример показывает, что запускается корутина в одном потоке, yield'ится, а потом продолжает работу в другом, когда первый уже завершился
Да, корутина запускается каким-то из потоков и работает в потоке (очевидно), и "держит" его во время работы. При этом поток спокойно может передать спящую корутину другому потоку, чтобы она выполнялась в нём. В чём проблема-то?

A>В сервисе это нафиг не нужно (в UI да, нужно). Запускающий поток там — это один из потоков пула (т.н. worker thread или iocp thread).

A>Т.е. хотелось бы, чтобы yield() из примера отпускал поток обратно в пул, а после yield() управление мог взять любой другой поток пула.

Не пойму о какой проблеме ты говоришь, опиши задачу конкретнее.
Состояние спящей stackful корутины, это по сути набор регистров + стэк, то есть просто "кусок памяти". Имея этот "кусок памяти" корутину можно продолжить в любом потоке. Это позволяет реализовывать самые разнообразные сценарии.

Вообще, я тебе вот в этой ветке
Автор: Evgeny.Panasyuk
Дата: 26.06.13
уже показывал, что stackful coroutine (Boost.Coroutine) мощнее stackless (C# await), потом ты куда-то исчез и теперь рассказываешь про "макаронную фабрику".
Re[29]: cppcms
От: Privalov  
Дата: 24.09.14 07:06
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>По тестам с натяжкой соглашусь. Остальное?


А что остальное? Для серверного приложения я не стал бы выбирать C/C++. Только в качестве вспомогательного средства для чего-нибудь низкоуровневого типа JNI.

P>>

А тут меня уверяют что с++ и 200 запросов\с не выдержит.

P>>Говорил? А C++ и не должен ничего выдерживать. Это всего лишь язык.
S>Все всегда воспринимают всё буквально? Контекст то про cppcms, о чем заголовок топика как бы намекает...

Так это cppcms выдерживает 200 запросов в секунду? Так бы прямо и писал. А то намеки тонкие какие-то. У меня телепатический модуль в зачаточном состоянии.

А в каких условиях он столько выдерживает?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.