Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, 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 ...)... дошел бы до корня, дальше сортировка... Нет под рукой БД, пробовать надо. В голове не особо получается
Здравствуйте, Privalov, Вы писали:
S>>Возможно правда была бы там, если бы я попал в менеджеры и учил бы программеров правильно прикрывать тылы. Слава богам, я попал в админы. P>Ну да, те, кто сами не умеют, с большой охотой учат других.
Здравствуйте, Privalov, Вы писали:
S>>Нету убытков у меня. Запомни это. Денег в этом уравнении нет вообще. Если ты говоришь о программировании за деньги — то это не про меня. P>У тебя — нет. А у конторы, где ты работаешь — есть. А то, что ты на нее бесплатно работаешь — проблема твоя, а не ее.
Мне платят деньги за другое. А программирование — хобби.
Здравствуйте, Privalov, Вы писали:
S>>А тут меня уверяют что с++ и 200 запросов\с не выдержит. P>Не выдержит не C++, а приложение, на нем написанное. Точнее, может не выдержать. Все зависит от команды, делающей приложение.
Ты случаем не пытаешься выразить утверждение в том что не программист шеридан — не программист? о0
Здравствуйте, Sheridan, Вы писали:
S>В текущих проектах точно в процессор не уткнусь S>А вот в БД — вполне могу...
Это значит, ответы на твои запросы возвращают гигабайты данных? И системе просто не хватает ресурсов их выгрести? Тогда конечно, в процессор ты не упрешься.
Здравствуйте, 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>Ты мне сроки ставишь?
Нет, я у тебя о сроках спрашиваю. Что то у тебя парсинг русского барахлит.
Здравствуйте, Sheridan, Вы писали:
P>>Ты в своем проекте, по крайней мере, не думаешь про рисование окон и доступ к БД. S>Ну, мне не понравился cppdb и pqxx, нарисовал свою обёртку над pqxx...
Для доступа к БД из C++ могу посоветовать использовать SOCI. Очень удобный и мощный инструмент.
S>Вот и я об чём. А мой проект будет вполне себе работать на raspberry pi, при условии конечно что БД будет на нормальном сервере. S>Иными словами я смогу разделить бюджет на железо не поровну между сервером приложения и сервером БД, а взять действительно мощный сервер для БД, а приложение запустить на чем то попроще.
А были тесты, что скажем реализация на Python не справится с той же самой задачкой на малинке? )
P.S. Я как раз C++'ик, если что. ))) Но для данной задачки (я так понял что речь идёт о простейшей вебморде к БД, причём внутрикорпоративной, т.е. без особой нагрузки) я бы в начале всё же попробовал менее мощные средства с более простой разработкой.
Здравствуйте, Ночной Смотрящий, Вы писали:
S>>Можно и так, движок позволяет. Только поиск по int индексу все таки быстрее, чем поиск по std::string индексу. НС>Вот поэтому надо выбирать языки, в которых есть LINQ, а не С++.
Linq легко реализуется и на C++ (примеры известны), только это всё совершенно не пользуется популярностью в связи с наличием гораздо более удобных технологий.
Но конечно код Sheridan'а с обращением по индексам — это совсем не позитивный пример. )))
Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, Ночной Смотрящий, Вы писали:
НС>>Вот поэтому надо выбирать языки, в которых есть LINQ, а не С++.
_>Linq легко реализуется и на C++ (примеры известны), только это всё совершенно не пользуется популярностью в связи с наличием гораздо более удобных технологий.
Гораздо более удобных, чем Linq, реализованный на C++
Здравствуйте, artelk, Вы писали:
A>Намного раньше он упрется в количество потоков (при чем, ждущих завершения IO операций 99,9% времени) — т.е. даже вертикального масштабирования нет.
Если CppCMS работает по схеме "по потоку на клиента" (я лично не в курсе как там у них что реализовано), то это весьма вероятный сценарий при высокой нагрузке. Хотя конечно же можно придумать такие запросы к БД, что она навернётся первой. )))
A>Решение: асинхронные IO операции (т.е. IOCP или epoll), что, в случае плюсов, означает взрыв на макаронной фабрике из колбэков. A>Boost.coroutine не предлагать — оно однопоточное.
Абсолютное не знание темы. ) И про выбор между колбэками и сопрограммами в случае асинхронного IO и про работу Boost.coroutine. Советую для начала хотя бы посмотреть на исходники Boost.Asio...
Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, artelk, Вы писали:
A>>Boost.coroutine не предлагать — оно однопоточное.
_>Абсолютное не знание темы. ) И про выбор между колбэками и сопрограммами в случае асинхронного IO и про работу Boost.coroutine. Советую для начала хотя бы посмотреть на исходники Boost.Asio...
Здравствуйте, artelk, Вы писали:
_>>Linq легко реализуется и на C++ (примеры известны), только это всё совершенно не пользуется популярностью в связи с наличием гораздо более удобных технологий. A>Гораздо более удобных, чем Linq, реализованный на C++
Нет, чем в любых мейнстрим языках, т.к. во всех остальных отсутствуют необходимые возможности (которые есть в C++, в единственном из мейнстрима). Вот если брать не мейнстрим языки, то уже действительно есть интересные варианты...
Здравствуйте, genre, Вы писали:
G>Здравствуйте, Sheridan, Вы писали:
S>>Угу, я уже понял. Современное качество уже совсем другое.
G>Ладно, это все бессмысленно.
Наконец-то понял. Шеридан — это радикальный религозный фанатик C++, Qt и прочей лабуды. Человек живущий в мире иллюзий "о том как действительно надо писать программы" на протяжении многих лет и никто еще не смог поколебать его веру. Аминь!
#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
Здравствуйте, Privalov, Вы писали:
S>>В текущих проектах точно в процессор не уткнусь S>>А вот в БД — вполне могу...
P>Это значит, ответы на твои запросы возвращают гигабайты данных? И системе просто не хватает ресурсов их выгрести? Тогда конечно, в процессор ты не упрешься.
Это значит, что все что мне говорили ранее, типа "код ничто — запросы к БД и в сеть основной тормоз" — лукавство?
Гигабайты конечно никто пока еще не вытаскивает, но вот перелопатить гигабайты в поиске пары строк — вполне себе будет.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>>>У меня sqlite, с линупсом вроде как проблем быть не должно. S>>Весит сколько?
НС>1.5Гб нерукопожатно.
Выкладывай куда нибудь в файлообменник, мне в почту не пролезет