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

НС>Здравствуйте, Sheridan, Вы писали:


НС>>>Даже если полей два десятка?

S>>Да

НС>Ну ну.


НС>>>Быстрее и проще как раз использовать LINQ — гарантия отсутствия любых проблем с неправильным индексом поля.

S>>Нафига усложнять?

НС>Вот и я тоже думаю — нафига?


НС>>>Уверен? Давай проверим, недавно в соседнем форуме обсуждалось. Есть табличка вида (messageid:int, userid:int, parentid:int, date:datetime). Нужно составить запрос, который выдает все корневые сообщения (parentid=null), упорядоченные по дате последнего ответа в ветку, начатую указанным userid. Разумеется, на любом уровне вложенности. Простой, так сказать, тестик на знание CTE.

S>>Еще раз и помеждленее, не понял тз.

НС>Есть топик. В нем есть мое сообщение. На него есть ответы. В том числе и не прямые. И есть соседние ветки, без моих сообщений. Нужно взять дату последнего ответа, но только в тех ветках, в которой наверху есть мое сообщение, и отсортировать топики по ней.

То есть выбрать корни всех деревьев, в самом верху которых твой ответ? Навскидку начал бы с рекурсивного спуска вниз... чтото вроде этого with recursive ttt(uid) as (select pid from tbl where tbl.uid=uid and tbl.id not in (select pid from tbl) union all ...)... дошел бы до корня, дальше сортировка... Нет под рукой БД, пробовать надо. В голове не особо получается
Matrix has you...
Re[26]: cppcms
От: Sheridan Россия  
Дата: 23.09.14 19:31
Оценка:
Здравствуйте, Privalov, Вы писали:

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

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

А разве в реальном мире не так?
Matrix has you...
Re[30]: cppcms
От: Sheridan Россия  
Дата: 23.09.14 19:32
Оценка:
Здравствуйте, Privalov, Вы писали:

S>>Нету убытков у меня. Запомни это. Денег в этом уравнении нет вообще. Если ты говоришь о программировании за деньги — то это не про меня.

P>У тебя — нет. А у конторы, где ты работаешь — есть. А то, что ты на нее бесплатно работаешь — проблема твоя, а не ее.
Мне платят деньги за другое. А программирование — хобби.
Matrix has you...
Re[24]: cppcms
От: Sheridan Россия  
Дата: 23.09.14 19:33
Оценка:
Здравствуйте, Privalov, Вы писали:

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

P>Не выдержит не C++, а приложение, на нем написанное. Точнее, может не выдержать. Все зависит от команды, делающей приложение.

Ты случаем не пытаешься выразить утверждение в том что не программист шеридан — не программист? о0
Matrix has you...
Re[29]: cppcms
От: Privalov  
Дата: 23.09.14 19:39
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>В текущих проектах точно в процессор не уткнусь

S>А вот в БД — вполне могу...

Это значит, ответы на твои запросы возвращают гигабайты данных? И системе просто не хватает ресурсов их выгрести? Тогда конечно, в процессор ты не упрешься.
Re[29]: cppcms
От: Ночной Смотрящий Россия  
Дата: 23.09.14 19:55
Оценка:
Здравствуйте, Sheridan, Вы писали:

НС>>У меня sqlite, с линупсом вроде как проблем быть не должно.

S>Весит сколько?

1.5Гб нерукопожатно.
Re[33]: cppcms
От: Ночной Смотрящий Россия  
Дата: 23.09.14 19:55
Оценка:
Здравствуйте, Sheridan, Вы писали:

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]));
    }
}


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

S>Ты мне сроки ставишь?

Нет, я у тебя о сроках спрашиваю. Что то у тебя парсинг русского барахлит.
Re[23]: cppcms
От: Ночной Смотрящий Россия  
Дата: 23.09.14 19:58
Оценка: :)
Здравствуйте, Sheridan, Вы писали:

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


Ты С++ со своим кодом то не путай. А то выглядит как "Украина вместе с США займут половину рынка кукурузы".
Re[21]: cppcms
От: alex_public  
Дата: 23.09.14 20:35
Оценка: +1
Здравствуйте, Sheridan, Вы писали:

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

S>Ну, мне не понравился cppdb и pqxx, нарисовал свою обёртку над pqxx...

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

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

S>Иными словами я смогу разделить бюджет на железо не поровну между сервером приложения и сервером БД, а взять действительно мощный сервер для БД, а приложение запустить на чем то попроще.

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

P.S. Я как раз C++'ик, если что. ))) Но для данной задачки (я так понял что речь идёт о простейшей вебморде к БД, причём внутрикорпоративной, т.е. без особой нагрузки) я бы в начале всё же попробовал менее мощные средства с более простой разработкой.
Re[22]: cppcms
От: alex_public  
Дата: 23.09.14 20:46
Оценка: +1 :)
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Можно и так, движок позволяет. Только поиск по int индексу все таки быстрее, чем поиск по std::string индексу.

НС>Вот поэтому надо выбирать языки, в которых есть LINQ, а не С++.

Linq легко реализуется и на C++ (примеры известны), только это всё совершенно не пользуется популярностью в связи с наличием гораздо более удобных технологий.

Но конечно код Sheridan'а с обращением по индексам — это совсем не позитивный пример. )))
Re[24]: cppcms
От: alex_public  
Дата: 23.09.14 20:47
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Вот поэтому для работы с БД и нужно выбирать языки, в которых есть механизмы цитирования кода, а не С++.


Какие какие механизмы? )
Re[23]: cppcms
От: artelk  
Дата: 23.09.14 20:55
Оценка: +1 :)
Здравствуйте, alex_public, Вы писали:

_>Здравствуйте, Ночной Смотрящий, Вы писали:


НС>>Вот поэтому надо выбирать языки, в которых есть LINQ, а не С++.


_>Linq легко реализуется и на C++ (примеры известны), только это всё совершенно не пользуется популярностью в связи с наличием гораздо более удобных технологий.


Гораздо более удобных, чем Linq, реализованный на C++
Re[27]: cppcms
От: alex_public  
Дата: 23.09.14 20:57
Оценка: +2
Здравствуйте, artelk, Вы писали:

A>Намного раньше он упрется в количество потоков (при чем, ждущих завершения IO операций 99,9% времени) — т.е. даже вертикального масштабирования нет.


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

A>Решение: асинхронные IO операции (т.е. IOCP или epoll), что, в случае плюсов, означает взрыв на макаронной фабрике из колбэков.

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

Абсолютное не знание темы. ) И про выбор между колбэками и сопрограммами в случае асинхронного IO и про работу Boost.coroutine. Советую для начала хотя бы посмотреть на исходники Boost.Asio...
Re[28]: cppcms
От: artelk  
Дата: 23.09.14 21:00
Оценка:
Здравствуйте, alex_public, Вы писали:

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


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


_>Абсолютное не знание темы. ) И про выбор между колбэками и сопрограммами в случае асинхронного IO и про работу Boost.coroutine. Советую для начала хотя бы посмотреть на исходники Boost.Asio...


Лапша из колбэков?
Re[24]: cppcms
От: alex_public  
Дата: 24.09.14 00:40
Оценка:
Здравствуйте, artelk, Вы писали:

_>>Linq легко реализуется и на C++ (примеры известны), только это всё совершенно не пользуется популярностью в связи с наличием гораздо более удобных технологий.

A>Гораздо более удобных, чем Linq, реализованный на C++

Нет, чем в любых мейнстрим языках, т.к. во всех остальных отсутствуют необходимые возможности (которые есть в C++, в единственном из мейнстрима). Вот если брать не мейнстрим языки, то уже действительно есть интересные варианты...
Re[29]: cppcms
От: alex_public  
Дата: 24.09.14 00:50
Оценка:
Здравствуйте, artelk, Вы писали:

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


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

Да, и всё это отлично живёт в условиях многопоточности. )
Re[22]: cppcms
От: DarthSidius  
Дата: 24.09.14 02:30
Оценка: +2 :)
Здравствуйте, genre, Вы писали:

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


S>>Угу, я уже понял. Современное качество уже совсем другое.


G>Ладно, это все бессмысленно.


Наконец-то понял. Шеридан — это радикальный религозный фанатик C++, Qt и прочей лабуды. Человек живущий в мире иллюзий "о том как действительно надо писать программы" на протяжении многих лет и никто еще не смог поколебать его веру. Аминь!
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
Re[27]: cppcms
От: Evgeny.Panasyuk Россия  
Дата: 24.09.14 02:57
Оценка:
Здравствуйте, artelk, Вы писали:

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


О чём речь? LIVE DEMO
#include <boost/coroutine/all.hpp>
#include <iostream>
#include <future>
#include <thread>

using namespace boost;
using namespace std;

void print_tid(const char *x)
{
    cout << "Thread ID " << this_thread::get_id() << " in " << x << endl;
}

int main()
{
    print_tid("main begin");
    async(launch::async, []
    {
        coroutines::symmetric_coroutine<void>::call_type coro([](auto &yield)
        {
            print_tid("coro begin");
            yield();
            print_tid("coro end");
        });
        coro();
        return coro;
    }).get()();
    print_tid("main end");
}

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

Re[30]: cppcms
От: Sheridan Россия  
Дата: 24.09.14 03:37
Оценка:
Здравствуйте, Privalov, Вы писали:

S>>В текущих проектах точно в процессор не уткнусь

S>>А вот в БД — вполне могу...

P>Это значит, ответы на твои запросы возвращают гигабайты данных? И системе просто не хватает ресурсов их выгрести? Тогда конечно, в процессор ты не упрешься.


Это значит, что все что мне говорили ранее, типа "код ничто — запросы к БД и в сеть основной тормоз" — лукавство?
Гигабайты конечно никто пока еще не вытаскивает, но вот перелопатить гигабайты в поиске пары строк — вполне себе будет.
Matrix has you...
Re[30]: cppcms
От: Sheridan Россия  
Дата: 24.09.14 03:38
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>>>У меня sqlite, с линупсом вроде как проблем быть не должно.

S>>Весит сколько?

НС>1.5Гб нерукопожатно.

Выкладывай куда нибудь в файлообменник, мне в почту не пролезет
Matrix has you...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.