Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Вводная лекция в язык C#, для тех кто знает программирование и в особенности C++. В статье будет уделено внимание наиболее важным отличиям языков, будут обсуждаться вопросы производительности и эффективного кода.
Другие интересные статьи по C# ищите тут: http://itw66.ru/blog/c_sharp/
Написание компактного и эффективного кода в C#: http://itw66.ru/blog/c_sharp/520.html
Презентация по АТД (контейнеры, последовательности и списки). Версия для C++, по сравнению с версией для C# добавлены новые рисунки для последовательностей и детализированные задачи.
Презентация по АТД (контейнеры, последовательности и списки). Версия для C++, по сравнению с версией для C# добавлены новые рисунки для последовательностей и детализированные задачи.
Time series data in a relational database. TimescaleDB and PipelineDB extensi...Ivan Muratov
Extensions allow you to stay in the PostgreSQL ecosystem, use the usual means of backup, monitoring and other things, while getting functionality that is specific to temporal data and time series.
Web-программирование
Лекция #7. Django ORM
Цикл лекций читается в Омском государственном университете им. Ф.М.Достоевского на факультете компьютерных наук.
Лектор: Яковенко Кирилл Сергеевич.
Scala-библиотека Slick прекрасно зарекомендовала себя как развитый и удобный инструмент работы с базами данных. Поддерживаются и простейшие текстовые SQL-запросы, и строго типизированные join’ы нескольких таблиц. Для построения запросов Slick предоставляет DSL, код на котором выглядит как обработка коллекций. Причем простые подзапросы могут использоваться для конструирования более сложных.
Slick имеет весьма любопытную внутреннюю архитектуру, которая делает возможным не только продвинутое использование, но и расширение библиотеки несколькими способами, о которых и пойдет речь в докладе.
(see also video: https://youtu.be/9n1zzwOGado)
Александр Сычев "Разделяй и властвуй: CQRS в iOS"IT Event
В сложных мобильных приложениях, работающих с большим объемом постоянно изменяющихся данных, задача их синхронизации и своевременного обновления в разных модулях становится нетривиальной. В своем докладе я предлагаю отойти от привычных подходов и применить практику разделения ответственности на команды и запросы, предполагающую использование разных моделей для обновления и чтения информации. Я продемонстрирую области, в которых этот подход поможет мобильным разработчикам эффективно развивать их приложения. Слушатели узнают о сложностях, с которыми им придется столкнуться при его адаптации и о том, как их следует решать.
Рассказ будет интересен опытным разработчикам, сталкивающимся в своей практике с задачей развития высокопроизводительных приложений со множеством потоков данных.
Консервативный Backend на Node.js / Дмитрий Ляпин (Recrumatic)Ontico
РИТ++ 2017, Backend Conf
Зал Кейптаун, 5 июня, 14:00
Тезисы:
http://backendconf.ru/2017/abstracts/2510.html
Я расскажу об опыте разработки REST API сервиса одной рекрутинговой платформы. Стремясь найти простое и масштабируемое решение, мы выбираем PostgreSQL и Node.js, а вместо сессий используем JWT-токены. Избегая ORM, мы пишем большие и сложные, но эффективные SQL-запросы. На помощь приходят SQL-представления, триггеры и небольшая собственная JS-библиотека.
...
«Scrapy internals» Александр Сибиряков, Scrapinghubit-people
- Scrapy is a framework for web scraping that allows for extraction of structured data from HTML/XML through selectors like CSS and XPath. It provides features like an interactive shell, feed exports, encoding support, and more.
- Scrapy is built on top of the Twisted asynchronous networking framework, which provides an event loop and deferreds. It handles protocols and transports like TCP, HTTP, and more across platforms.
- Scrapy architecture includes components like the downloader, scraper, and item pipelines that communicate internally. Flow control is needed between these to limit memory usage and scheduling through techniques like concurrent item limits, memory limits, and delays between calls.
«Отладка в Python 3.6: Быстрее, Выше, Сильнее» Елизавета Шашкова, JetBrainsit-people
The document discusses debugging in Python 3.6. It describes tracing and frame evaluation debuggers. Tracing debuggers slow code execution significantly by calling the tracing function on every line. Python 3.6 introduced a new frame evaluation API that allows evaluating frames directly, avoiding the performance issues of tracing. The document demonstrates how to build a debugger using this approach, including setting breakpoints and stepping through code by inserting temporary breakpoints on each line. Frame evaluation allows building a debugger that is faster than tracing debuggers without significant performance penalties.
«Gevent — быть или не быть?» Александр Мокров, Positive Technologiesit-people
Gevent is a concurrency library for Python that uses greenlets, or lightweight coroutines, to provide asynchronous operations and non-blocking I/O. It allows developing highly concurrent applications using a simple and familiar synchronous style. The document compares gevent to other concurrency options like asyncio and discusses how it provides features like asynchronous task execution, event loops, and inter-greenlet communication using queues and callbacks.
«Что такое serverless-архитектура и как с ней жить?» Николай Марков, Aligned ...it-people
The document discusses what serverless computing is and how it can be used for building applications. Serverless applications rely on third party services to manage server infrastructure and are event-triggered. Popular serverless frameworks like AWS Lambda, Google Cloud Functions, Microsoft Azure Functions, and Zappa allow developers to write code that runs in a serverless environment and handle events and triggers without having to manage servers.
«Python на острие бритвы: PyPy project» Александр Кошкин, Positive Technologiesit-people
The document describes a talk on optimizing Python performance through just-in-time compilation. It discusses how the CPython interpreter works by evaluating bytecode through an evaluation loop. It then talks about how PyPy achieves faster performance through jit compilation of hot loops detected via tracing. The talk dives into the RPython language used to implement PyPy and shows an example of compiling a small Python program to C with RPython. It also discusses using partial evaluation to specialize an interpreter for constant inputs.
«PyWat. А хорошо ли вы знаете Python?» Александр Швец, Marilyn Systemit-people
The document appears to be a transcript of Python code being executed in an interactive Python shell. It contains examples testing the behavior of built-in functions and operators like sorted(), reversed(), isinstance(), sum(), float("nan"), is, min(), and comparisons like ==, <, on various data types including lists, tuples, and dictionaries.
«(Без)опасный Python», Иван Цыганов, Positive Technologiesit-people
The document discusses various security vulnerabilities in Python web applications. It begins with an overview of the OWASP Top 10 security risks, with sections focusing on risks related to using components with known vulnerabilities (A9) and insufficient attack protection (A7). For A9, it provides examples of vulnerabilities in popular Python packages and recommends checking changelogs and vulnerability databases. For A7, it recommends implementing attack protections like login attempts logging, rate limiting, and use of a web application firewall. The document also covers security misconfiguration (A5), giving examples like using default settings in production and exposing tracebacks.
«Как сделать так, чтобы тесты на Swift не причиняли боль» Сычев Александр, Ra...it-people
The document discusses best practices for writing tests in Swift, including recommendations to:
- Write clean, readable tests that focus on asserting a single truth
- Use a domain-specific language in tests for clarity
- Structure tests with "given-when-then"
- Mock dependencies through protocols to enable test isolation
- Favor partial mocks over fully mocking to limit complexity
4. Наши требования
3 млн звонков с анкетами в сутки
20 атрибутов на каждую анкету
сложная иерархия форм анкеты
(сотни разных анкет и форм)
PostgreSQL, Oracle >= 10g
Скорость открытия 2с
1000 операторов
7. Плюсы и минусы
+ схема данных
фиксирована
+ можно
использовать для
разных классов
- много данных
- сложно
партиционировать
- значения хранятся
в конкретном виде
- много null-
значений
- большие индексы
10. Плюсы и минусы
+ любой тип
данных
+ индексы на
нужные столбцы
+ партицион-е
- ограничено
количество атрибутов
- тяжелое удаление
- неудобные запросы
- блокировки схемы
11. Что использовать
PostgreSQL >= 9.4 : json или jsonb
Oracle >=10g : xmltype (clob)
Oracle 11g : xmltype (binary xml)
MsSQL 2014 : xml
MySQL : -
13. Получение в PostgreSQL
Создание столбца:
alter table test_table
add column attrData jsonb;
Получение значения:
SELECT attrData->’form3’->>’title’
FROM test_table
15. Получение в Oracle
Создание столбца:
alter table test_table
add column attrData xmltype;
Получение значения:
SELECT
extractValue(jsonData,'/root/form3/title'),
extract(jsonData,'...').getStringVal(),
extract(jsonData,'...').getNumVal(),
extract(jsonData,'...').getClobVal()
FROM test_table
16. Плюсы и минусы
+ не нужны join
+ любое
количество
атрибутов
+ удобнее
получать значения
ч/з SQL
+ история
+ партицион-е
- разный синтаксис у
разных БД
- тип данных: строка
- нет FK
- Oracle 4Кб
17. Получение массивов в PostgreSQL
SELECT attrData→'form1'→'alias'
FROM test_table
["Человек из стали", "Последний сын
Криптона", "Человек завтрашнего дня"]
18. Получение массивов в Oracle
select alias.COLUMN_VALUE
FROM test_table, TABLE( XMLSequence(
extract(attrData, '/root/form1/alias'))) alias
"Человек из стали"
"Последний сын Криптона"
"Человек завтрашнего дня"
20. Индекс в PostgreSQL
CREATE INDEX idxginp ON test_table
USING gin (attrData jsonb_path_ops)
SELECT * FROM test_table
WHERE attrData @>
'{"form1": { "nickname" : "Superman"}}'
21. Индекс в Oracle
CREATE INDEX idx_attrdata ON
test_table(attrData)
indextype is ctxsys.ctxxpath
SELECT * FROM test_table WHERE
existsNode(attrData,
'/root/form1/nickname="Superman"')=1
24. Итоги перехода
1. Быстрая выборка и обновление
2. Скорость выборки 1.6c → 0.35c
3. Меньшая деградация скорости БД
4. Ускорение импорта в 3 раза
5. Снижение нагрузки на CPU и
требования к железу
6. Уменьшение размера БД
7. “Человеческий” формат данных
25. Планы на будущее
1. Партиционирование
2. Шардинг
3. Возможность перейти на честные
NoSQL БД