Некоторые время назад сильно увлёкся потреблением информации с научно-популярным
уклоном. Но как не заблудиться в миллионах книг? Ресурс то
ограничен. А значит придётся выбирать.
Как сузить поле выбора? Я решил взять рейтинги и подборки. Стал
копать в этом направлении. С насмотренностью начало приходить
понимание, что в рейтингах где хоть кого-то выкидывают, в основном
одни и те же. И вот те, кто наблюдаются в приличных местах, связаны
несколькими маркерами.
Какие маркеры мне на данный момент кажутся ярко
перспективными:
- Топы книг в Дигитеке (ребята кстати сделали
проект по бесплатной раздаче топового научпопа в электронном
виде)
- Попадание на книгу вот этого деревца фонда Династия от
Дмитрия Зимина.
Ну и конечно попадание в шорт листы премии Просветитель.
- Попадание на обложку книги вот этих обезьянки и человека,
причиляющее его к библиотеке фонда Эволюция.
Раздел 1. Законы науки и мышление
(Математика, Рациональность, Научный метод, Когнитивные
искажения, Нейрофизиология, Ошибки мышления, Доказательная
медицина)
Защита от темных искусств Александр Панчин
Рациональность: От ИИ до
зомби Элиезер Юдковский
Вы конечно шутите мистер Фейнман Ричард Фейнман
Объясняя религию Паскаль Буайе
Думай медленно решай быстро Каннеман
Мир полный демонов Карл Саган
Гедель, Эшер, Бах: эта бесконечная гирлянда Дуглас Хофштадтер
Как не ошибаться. Сила математического мышления Джордан
Элленберг
Недоверчивые умы: чем нас привлекают теории заговоров Роб
Бразертон
Как работает разум Стивен Пинкер
Неприродная природа науки Льюис Уолперт
Предистория разума Стивен Митен
Фактологичность Ханс Рослинг
Сигнал и шум Нейт Сильвер
0,05 доказательная медицина Пётр Талантов
Пациент разумный Алексей Водовозов
Укрощение бесконечности. История математики от первых чисел до
теории хаоса Иэн Стюарт
Математика для гуманитариев Алексей Савватеев
Математика космоса Иэн Стюарт
Раздел 2. Законы природы
(Физика, Теория относительности, Квантовая механика,
Астрофизика, Астрономия, Изобретения и открытия)
Космос Карл Саган
Краткая история времени Стивен Хокинг
Краткие ответы на Большие вопросы Стивен Хокинг
В поисках кота Шредингера. Квантовая физика и реальность Джон
Гриббин
Элегантная Вселенная. Суперструны, скрытые размерности и поиски
окончательной теории Брайан Грин
Суперобъекты Сергей Попов
Темная сторона вселенной Владимир Сурдин
Теория всего Стивен Хокинг
Мир в ореховой скорлупке Стивен Хокинг
Астрономия. Популярные лекции Владимир Сурдин
Голубая точка. Космическое будущее человечества Карл Саган
Ткань космоса. Пространство, время и текстура реальности Брайан
Грин
Всё из ничего: Как возникла Вселенная Краусс, Лоуренс Максвелл
Фейнмановские лекции по физике Сэндс; Фейнман; Лейтон
Раздел 3. Законы жизни
(Абиогенез, Теория эволюции, Химия жизни (Клетки, ДНК),
Антропогенез)
Эгоистичный ген Ричард Докинз
Происхождение жизни: От туманности до клетки Михаил Никитин
Эволюция человека Марков
Достающее звено Станислав Дробышевский
Сумма биотехнологии Панчин Александр
Лестница жизни Ник Лейн
Вопрос жизни Ник Лейн
От атомов к древу Ястребов
Расширенный фенотип Ричард Докинз
Слепой часовщик Ричард Докинз
Самая главная молекула. От структуры ДНК до биомедицины 21 века
Максим Франк-Каменецкий
Она смеется, как мать: могущество и причуды наследственности Карл
Циммер
Хлопок одной ладонью Николай Кукушкин
Раздел 4. Художественный научпоп / Научная фантастика
Гарри Поттер и методы рационального
мышления Элиезер Юдковский
Апофения Александр Панчин
Понедельник начинается в субботу Стругацкие
Я - робот Айзек Азимов
Гарвардский Некромант Александр Панчин
Драконы Эдема Карл Саган
Праща Давида Марк Стиглер
Звёздные дневники Ийона Тихого Станислав Лем
Конец Вечности Айзек Азимов
Анафем Нил Стивенсон
Политика и английский язык Оруэлл
Пасынки Вселенной Роберт Хайнлайн
Марсианин Клиффорд Саймак
Гиперион Дэн Симмонс
За миллиард лет до конца света Стругацкие
Квантовый Вор Ханну Райаниеми
Ложная слепота Питер Уотс
Мошка в зенице господней Нивен и Пурнель
Принц Хаоса Роджер Желязны
Большая часть книг из списка не прочитана. Часть книг, которые были в списке, улетели из него после прочтения. В связи с чем, вопрос к Вам. Читали ли Вы что-то из списка? Можете ли сказать про какую то из книг что-то конкретно плохое? Может что-то в списке смотрится не в тему? И конечно главный вопрос. Какой книги там точно не хватает?
Из научной фантастики интересует больше всего Твёрдая.
Псс. А ещё у меня естьканал в телеграмме. Данную библиотеку планирую регулярно "допиливать" у себя втелеграмме. А Ваши рекомендации вынесу в UPD данной статьи.
Место для ваших рекомендаций.
Раздел 1. Законы науки и мышление
(Математика, Рациональность, Научный метод, Когнитивные
искажения, Нейрофизиология, Ошибки мышления, Доказательная
медицина)
Здесь грустно и одиноко путник.
Раздел 2. Законы природы
(Физика, Теория относительности, Квантовая механика,
Астрофизика, Астрономия, Изобретения и открытия)
Здесь грустно и одиноко путник.
Раздел 3. Законы жизни
(Абиогенез, Теория эволюции, Химия жизни (Клетки, ДНК),
Антропогенез)
Здесь грустно и одиноко путник.
Раздел 4. Художественный научпоп / Научная фантастика
Здесь грустно и одиноко путник.
Бывало ли такое, что вы вас ограничивали за ваши мысли, так, что
вы больше не могли высказаться в ответ? Весьма досадное чувство, не
так ли? Как выстрел завершает жизнь человека, так и набор минусов
способен лишить вас права существования на площадке.
Что будет если попытаться устроить общение по новым принципам, без
администраторов, модераторов, без системы кармы, и даже без
владельцев хоста? Сохранить свободу высказываний и при этом
оградиться от хаоса? Я убежден что благодаря техническому прогрессу
это стало возможно уже сегодня, и предлагаю на деле убедиться в
этом, поучаствовав в эксперименте!
Высшее дао рождает тьму вещей, но ею не владеет; творит многообразные изменения, но над ними не господствует. Те, что бегают и дышат, летают и пресмыкаются, наступает время и рождаются, но не из-за его благоволения; наступает время и умирают, но не из-за его вражды. Приобретая с пользой, оно не может быть восхваляемо; тратя и терпя убыток, оно не может быть порицаемо. Делает раздачи и одаряет, а не скудеет
(Лао-цзы)
Представьте себе затерянный телеграм чат, где нет владельца, и
никто не был назначен модератором. У всех участников чата в фоновом
режиме майнится некая валюта, просто по факту присутствия в чате,
без регистрации. Благодаря встроеному в чат UX, валютой можно
обмениваться и передавать друг другу, быстрее чем перевод в
банке.
Ее также можно потратить чтобы закрепить свое сообщение на
определенное время... или чтобы заблокировать спамера. Блокировка
не удаляет человека, а лишь убирает ему поле ввода на время, в
зависимости от затраченной на блокировку валюты. Система была бы
несовершена без возможности отменить блокировку пользователю, точно
также потратив на это часть своей накопленной валюты.
Каждый может делать это! Нет инвайтов и все только в ваших и ваших друзей руках, нет централизованной точки отката, нет модератора который может затереть ваш пост или ограничить. Когда нет владельца, то нет и возможности для злоупотреблений "по праву владельца".
Валюта майнится в фоновом режиме безусловно от мнения о вас других пользователей. Это можно сравнить с безусловным базовым доходом. Сверх этого, ее можно увеличивать добровольными переводами, никак привязанными к содержанию и рейтингу ваших высказываний.
Каждый "из коробки" обладает банхаммером, но его мощность ограничивается накопленной (и полученной от других пользователей) валютой. Поэтому систему не получится использовать для злоумышленного канселинга.
Каждый может разбанить любого другого если у него достаточно валюты. Нет тотальной отмены с глубоким минусом, нет минуса которого нельзя отменить (как -100 на Хабре), нет лимитов прощения, было бы только желание подождать немного или попросить любого пользователя помочь вернуться сразу!
Проверить возможны ли новые, горизонтальные подходы во взаимодействии пользователей? Возможен ли отказ от иерархии? Можно ли общаться в интернете без концепции владения хостом? Можно ли автоматизировать модерацию? Успех эксперимента может стать толчком к расцвету таких систем. Эксперимент абсолютно некоммерческий, нет никакой рекламы, нет механизма извлечения выгоды. Я делаю это ради интереса посмотреть что получиться (и удовольствия пронаблюдать вышеописанную механику в действии).
Зайти в чат где все это реализовано: t.me/habr_experimental
В чате нет владельцев и админов, а вместо них подлючена и ждет
наплыва пользователей вышеописанная система. Полагаю что тематика
обсуждений может быть любая, на интересные целевой аудитории Хабра
темы, и помните что никто ни в чем не может ограничить вас, кроме
вас самих и таких же как вы людей.
Эта статья о социальном эксперименте, однако она была бы не для
Хабра без технических деталей. Поэтому для тех кому это интересно,
подробные принципы работы валюты и UX описаны в этой статье:
habr.com/ru/post/556292/
Исходный код системы доступен на GitHub: github.com/demidko/timecobot
Для бекенда использован один из лучших виданных мною языков -
Kotlin, за что хочу сказать здесь спасибо его разработчикам.
Возможно эта статья обрушит мою карму здесь, а возможно мы увидим
как появится новый мир свободных интернет-систем. Напоследок хочу
пожелать всем читавшим, эксперементируйте чаще и делайте это ради
интереса!
Популярность Python также подстёгивает значительный рост сферы Data Science, где Python считается приоритетным языком. К разочарованию поклонников R, Python требуют в 81% вакансий на позицию аналитика больших данных (читайте об этом в нашем материале), а R (без Python) нужен только в 3% случаев.
По всем рейтингам Python в топе (хоть и на втором месте после Java). Сохранится ли тенденция? Какие у языка перспективы?
Python не просто останется в топе еще много лет, но и поднимется по позициям. Если мы говорим о России, то это во многом обусловлено экономическими факторами. Люди поняли, что их профессии уже не такие нужные, да и денег приносят не так много. Поэтому многие начинают штурмовать IT-сферу и изучать программирование. А Python имеет очень низкий порог входа из-за простоты синтаксиса и, конечно же, сахара.
Тут мы приходим к другой причине. Python позволяет написать рабочий прототип скрипта с помощью нескольких десятков строк кода, в отличие от других языков, где будет уже сотня-другая. Тем самым разработка на Python гораздо быстрее. А для многих компаний нужно быть первыми, чтобы не потеряться на рынке.
Семён Березовский, ментор курса SkillFactory Python для веб-разработки
Особенно активно растёт Python. Количество разработчиков, которые считают Python своим основным ЯП, выросло на 21,1% по сравнению с 2019 годом.
В целом Python растёт практически во всех аспектах. Он лидирует по личностным предпочтениям программистов. Также его планирует изучать как второй язык наибольшее количество респондентов. А в качестве дополнительного языка программирования он занимает почётное второе место.
Учитывая темпы роста, Python через несколько лет вполне может вырваться в лидеры и крепко оккупировать первое место. Тем более что разрыв между ним и лидером составляет всего чуть больше 5 %.
Для принятия правильных решений в различных жизненных ситуациях очень полезно иметь адекватную модель мира. В частности, бывает полезна возможность сопоставить популярность различных предметов и оценить динамику этой популярности. Например, вы издатель, и вам предлагают перевести и издать книгу по языку программирования Fortran. Его ведь всё ещё используют, издаётся англоязычная литература, а у нас давно ничего не выходило. Или, скажем, по языку Julia. Книжек по актуальной версии языка на русском ещё нет. Можно взять какую-нибудь самую популярную английскую, перевести, издать и сорвать куш. В подобных ситуациях полезно иметь возможность подглядеть, какова популярность этих языков относительно других и какова динамика этой популярности. Пример с языками программирования приведён просто для наглядности, подобные задачи возникают и при анализе популярности различных программ, технологий, научных концепций.
Пример с языками программирования удобен ещё и потому, что для них имеются различные официальные рейтинги. Этих рейтингов много, они используют разные способы оценки популярности и естественно дают различающиеся результаты. Эти результаты к тому же подвержены достаточно сильному случайному дрейфу. Если посмотреть результаты разных рейтингов на какую-то конкретную дату, то создаётся впечатление, что мы ничего толком не знаем, и мир непостижим. Но ситуация немного меняется, если рассмотреть всё в динамике. В динамике становится видно, где дрейф, а где проглядывают какие-то реальные закономерности.
Одним из способов составления рейтингов популярности является анализ частоты поисковых запросов. Такой способ при всей его кажущейся наивности, при разумном использовании позволяет получать довольно устойчивые оценки. На этом, например, построен рейтинг языков программирования PYPL. Рейтинг строится на основе анализа запросов для поиска мануалов по тем или иным языкам. Но никакой общепит не сравнится с авторской кухней. Иногда хочется чего-то особенного, чего в существующих рейтингах может не быть. Например, рейтинг PYPL не включает в себя Fortran. Да, этот язык явно не лидер, хотя из других рейтингов известно, что он стабильно входит в верхние 50 строчек по популярности. Не проблема. Аналогичную картинку можно получить самостоятельно, не прибегая к помощи сторонних агентств, используя инструмент Google Trends. Вот, например, если посмотреть в динамике, можно увидеть хвост популярности Fortran (синий) и для масштаба относительно стабильный, хотя и немного снижающийся спрос на Matlab (красный). У Matlab, кстати, отчётливо видны сезонные пики два раза в год. По всей видимости перед зимней и весенней сессиями:
Глядя на такие картинки, невольно обращаешь внимание на левую границу, глубже которой невозможно копнуть, а именно на 2004 год. Поскольку анализируются запросы в Google, заглянуть в более древние периоды истории с помощью этого инструмента не получится. А ведь так любопытно взглянуть на период, когда Fortran был ещё на пике популярности. Но увы, наша машина времени туда попасть не может. Она была запущена на полную мощность только в 2004 году и все более ранние периоды для неё закрыты.
Из-за отсутствия информации по каким-либо другим инструментам ретроспективного поиска, я всегда думал, что возможность заглянуть в более ранние периоды отсутствует. Но, как оказалось, такая возможность имеется, причём инструмент предлагает всё та же компания Google. Называется он Google Books Ngram Viewer. Это инструмент статистического анализа информации, содержащейся в массиве книг из Google Books. В некотором смысле это гениальное решение, ведь печатные книги существуют уже несколько столетий, и имея их полные оцифрованные тексты, вполне можно использовать их как источник статистической информации о прошлых исторических периодах. Теперь хотя бы понятно, зачем Google создал и поддерживает проект Google Books. Общая цель здесь та же, что и поиска, и у сервисов: владение информацией. Но, к счастью, с нами готовы поделиться какой-то её частью.
Что предлагается:
Предлагается поисковая строка, куда нужно вводить запрос. Вводим запрос получаем график популярности данного слова в книгах. Начиная с 1800 (!!) года и до нашего времени. Поисковые запросы можно вводить через запятую тогда мы получим несколько линий на графике, соответствующих данным понятиям, и сможем оценить их динамику. Вот, например, тот же Fortran:
По умолчанию поиск чувствителен к регистру, то есть Fortran (написание названия для современных версий языка) и FORTRAN (написания названия для старых версий) это будут два разных слова. Можно выключить чувствительность к регистру, либо использовать арифметические выражения над введёнными поисковыми запросами, то есть написать FORTRAN+Fortran:
Инструмент статистический, не абсолютно точный, про это не стоит забывать. Например, для того же Фортрана мы увидим какие-то микровсплески ещё до публикации первой версии языка:
Также, как и упоминание о транзисторах ещё до их официального появления:
Любопытно было бы иметь возможность увидеть эти аномальные публикации, они могут представлять интерес. Но пока что такой возможности не предусмотрено.
Если не придираться к деталям, а смотреть какие-то общие тенденции, то в целом всё выглядит довольно реалистично. Например, можно увидеть, как упоминание Fortran в литературе сменяется на MATLAB:
Поскольку поиск по умолчанию выдаёт все вхождения заданного слова, забота о корректном учёте синонимов лежит на пользователе. В некоторых случаях провести такое разделение невозможно. Так, например, поиск просто по слову chip очевидно выдаёт слишком много случаев, когда слово употреблялось в других значениях, а поиск по слову microchip, хотя и явно точнее, не учитывает всех вариаций наименования предмета и не может использоваться для корректного количественного сопоставления с другими сущностями:
Например, если мы решим таким образом сопоставить популярность в литературе таких слов как Fortran+FORTRAN, MATLAB и Julia, то для первых двух это явно будет название языка программирования, а в последнем случае в первую очередь что-то совсем другое, включая различные имена собственные:
В этой смеси выделить именно язык программирования Julia проблематично. Введя дополнительное слово, мы сильно урежем допустимые вариации его использования, а не вводя получим неразделимую смесь. На данном этапе это неустранимое ограничение данного сервиса. В будущем конечно хотелось бы иметь возможность поиска понятий с учётом их смысла, примерно как в Google Trends. Искренне надеюсь, что прямо сейчас ведётся работа в этом направлении, просто результат ещё недостаточно хорош для показа.
Но всё-таки, даже с учётом различающейся вариативности контекстов сравниваемых слов, какую-то картину всё же можно получить. Например, сравнивая выдачу по таким понятиям, как electric, software и experiment мы увидим чёткую картину по использованию понятия software, которое не применялось до середины XX века, немного размытую картину по понятию electric поскольку оно могло использоваться в различных смыслах и контекстах, вплоть до художественной литературы, и примерно одинаковый уровень для experiment. Видимо, эксперименты производили и обсуждали на страницах книг с 1800 года и до наших дней с примерно одинаковой частотой. В последние десятилетия даже чуть реже, чем раньше:
Гораздо более чёткую картину даёт использование уникальных слов-маркеров, для которых известно, в связи с чем и в какое время их могли употреблять, а в какое ещё не могли. Таким образом, кстати, можно ещё и проверить адекватность выдачи. Вот пример для Stalingrad, Sputnik и perestroyka:
Ну что же, все пики вроде бы на своих местах. Интереса к перестройке в мировой литературе было явно меньше, чем к первым запускам спутников Земли. Похоже на правду.
Если взять какие-то более размытые понятия, например, genetic и neural, то даже несмотря на какой-то шум от возможного использования этих слов в других смыслах, виден явный подъём с середины XX века:
Интересно также оценить отражение вклада отдельных личностей в совокупность мировых печатных материалов. Но получится это далеко не со всеми деятелями, а только с имеющими какие-то необычные фамилии и не имеющими других известных однофамильцев. Вот, например, вклад Циолковского (одного из основоположников космонавтики и выдающегося философа-космиста) и Вистелиуса (основоположника математической геологии). Циолковский явно имеет большую известность и цитируемость в западной литературе:
Но даже если взять какую-то уникальную персоналию, то выдача будет зашумлена всем, что потом назвали в её честь. Вот пример по ключевому слову Lomonosov:
Явно в начале здесь вклад самого Михаила Васильевича (наверное, какие-то ссылки на его работы), потом названного в честь него университета, а потом ещё города и суперкомпьютера.
Для кириллических понятий можно осуществлять поиск по массиву русскоязычной литературы, но поскольку в Google Books пока что не очень большой её охват, а также есть риск, что распознавание текста выполнено не настолько качественно, как и для англоязычной, данную возможность пока скорее стоит рассматривать как демо-версию будущих возможностей сервиса.
По настройкам:
Можно сужать период охвата, можно менять набор текстов, по которым ведётся поиск, включать-выключать чувствительность регистра, менять степень сглаживания графиков. Есть некоторые выражения для поисковой строки, позволяющие реализовать некоторые специальные приёмы при поиске, наподобие арифметических действий над запросами. Есть и другие, они описаны на специальной странице.
Можно задавать только часть слова или искать по корням, учитывая его различные формы, можно указывать, какой частью речи должно являться искомое слово, осуществлять логические операции, чтобы отфильтровывать что-то лишнее. В принципе, возможности сервиса достаточны даже для каких-то лингвистических исследований, например, для анализа изменений норм языка.
Какие на данный момент есть проблемы:
1) Не учитывается контекст запроса. С одной стороны это хорошо, заставляет исследователя самого строить модель возможного использования слова. Поиск идёт более осознанно. С другой стороны, некоторые сущности без контекста разделить просто нельзя, то есть сейчас некоторые операции анализа просто нельзя выполнить, так как поиск по слову выдаёт неразделимую смесь нескольких понятий.
2) Нельзя перейти к конкретным текстам. И просто ради любопытства, и для проверки качества распознавания и поиска было бы интересно увидеть аномальные встречи заданного слова, когда его по идее ещё не должно было возникнуть. Возвращаясь к тому же Фортрану увидеть его упоминания до выхода первой версии.
3) Есть риск смещённости оценок из-за возможной неоднородности охвата оцифрованной литературы. Например, если имеется неоднородность по охвату различных областей знания, языков, исторических периодов. Было бы интересно увидеть какое-то процентное соотношение базы поиска к общей информации, хранимой в данный момент всеми библиотеками.
4) В принципе невозможно искать неразделимые термины и персоналии. Например, если будем искать по фамилии Толстой, то очевидно встретим след как от Льва Толстого, так и от Алексея Толстого, а также других выдающихся носителей этой фамилии. И начиная с какой-то даты их уже невозможно будет разделить. Для идеальной поисковой системы будущего, поисковая машина должна не просто учитывать контекст, а понимать запрос.
Какие промежуточные выводы можно сделать:
1) Объекты с уникальными и неизменными именами гораздо проще найти и оценить. Создавая новый язык программирования, программу или какое-то другое произведение давайте ему уникальное имя и старайтесь потом не менять.
2) Носители уникальных фамилий находятся в более выигрышном положении в плане обнаружения их заслуг (и в проигрышном в плане маскировки среди однофамильцев). Если у вас неоднозначно записываемая фамилия, то чем раньше вы определитесь с её эталонным написанием, тем проще будет потом найти ваши работы.
3) Практика наименования одного объекта в честь другого в долгосрочной перспективе может приводить к сложности оценки вклада как первого, так и второго. По крайней мере, при использовании поисковых машин, не умеющих понимать контекст вопроса
На этом всё. Надеюсь, данная заметка была полезна. Инструмент работает, и при осознанном использовании позволяет лучше понимать мир и его динамику. При не очень осознанном использовании может просто использоваться как игрушка. Но игрушка всё-таки развивающая. Почему бы и нет.
В ходе работы пришла пара интересных мыслей:
1) Наверное, примерно так и должна быть устроена мировая библиотека будущего. Фактически, это уже её прототип.
2) Сервис позволяет оценивать вклад отдельных понятий в общую совокупность всех записанных человеческих текстов, то есть фактически когда-либо высказанных мыслей представителей нашей цивилизации. Но как назвать эту совокупность?
Одним из наиболее частых требований-"хотелок" бизнеса является построение всяких разных рейтингов -"самые оборотистые клиенты", "самые продаваемые позиции", "самые активные сотрудники", - любимая тема разных дашбордов.
Но просто "самые" за весь доисторический период обычно неинтересны - продал ты 3 года назад вагон валенок, и теперь он у тебя в "самых" продажах вечно. Поэтому обычно хочется видеть"топ" на каком-то ограниченном последнем интервале- например, "за последний год" (точнее, за последние 12 календарных месяцев).
Традиционно, есть два подхода к этой задаче: запрос по требованию по "сырым" данным или предварительная агрегация. И если "просто посчитать" такой отчет по первичке - упражнение для SQL-новичка, но очень "тяжелое" для производительности СУБД, то вариант сделать так, чтобы он строился практически мгновенно при большом количестве активных аккаунтов независимых бизнесов, как у нас в СБИС, без необходимости пересчитывать агрегированную статистику каждого 1-го числа месяца судорожно по всем клиентам - интересная задача.
Для начала поймем, что "быстро" может быть только в том случае, когда мы можем простопройти по "верхушке" нужного индексаи извлечь искомые TOP-10 записей - без всяких суммирований и пересортировок.
То есть для решения задачи нам достаточно таблицы с единственным индексом (рассмотрим только вариант сортировки по сумме, для количества все будет аналогично):
CREATE TABLE item_stat( item -- товар integer, sum numeric(32,2));CREATE INDEX ON item_stat(sum DESC);
Наполнять ее данными мы можем легко и просто -инкрементом в триггерепри проведении продажи. Но как все-таки сделать эффективное "вычитание" данных при завершении месяца?..
Чтобы быстро что-то вычесть, нужно четко понимать, что именно.
В нашем случае - это продажи за 12-й месяц "назад" при пересечении границы. То есть наступил июнь - из общих счетчиков нужно вычесть все данные за июнь прошлого года. А для этого их нам нужно хранить отдельно от "годичных", из-за чего таблица принимает структуру:
CREATE TABLE item_stat( interval_id -- 0 - текущие счетчики, 202001 - январь 2020, 202002 - февраль, ... integer, item integer, sum numeric(32,2), UNIQUE(interval_id, item));CREATE INDEX ON item_stat(interval_id, sum DESC);
Чтобы понять, что вот прямо сейчас надо "вычесть" какой-то
месяц, достаточно оперироватьединственным дополнительным
параметромтипа"месяц последней актуализации
рейтинга продаж". Хранить его можно даже в служебной записи в этой
же таблице (если это не помешает Foreign Key, который вы можете
захотеть добавить на item
):
INSERT INTO item_stat( interval_id, item, sum)VALUES (0, 0, 202012) -- служебный ключ (0, 0), значение - 2020'12 вместо суммыON CONFLICT(interval_id, item) DO UPDATE SET sum = EXCLUDED.sum; -- всегда заменяем значение
Теперь при операции над продажей (отгрузка/аннулирование) вызываем, можно асинхронно, инкремент/декремент сразудля двух записей - "годичной" и текущего месяца:
INSERT INTO item_stat( interval_id, item, sum)VALUES (202001, 1, 100) -- + в рейтинг за январь 2020, ( 0, 1, 100) -- + в текущий рейтингON CONFLICT(interval_id, item) DO UPDATE SET sum = item_stat.sum + EXCLUDED.sum; -- всегда добавляем в сумму
Если текущиймесяц операции разошелся с месяцем из параметра,асинхронностартуем пересчет "годовых" значений, вычитая показатели за ставшие избыточными месяцы, и переактуализируем значение параметра:
-- "новый" месяц актуальностиWITH next AS ( SELECT 202101)-- предыдущий месяц актуальности, prev AS ( SELECT sum::integer FROM item_stat WHERE (interval_id, item) = (0, 0))-- все продажи за период, ставший неактуальным, в разрезе товаров, diff AS ( SELECT item , sum(sum) sum FROM item_stat WHERE interval_id BETWEEN (TABLE prev) - 100 AND (TABLE next) - 100 GROUP BY 1)UPDATE item_stat dstSET sum = dst.sum - diff.sumFROM diffWHERE (dst.interval_id, dst.item) = (0, diff.item);UPDATE item_statSET sum = 202101WHERE (interval_id, item) = (0, 0);
Если текущий месяц совпадает с месяцем из параметра, то все значения в "годичном" интервале актуальны - просто выводим топ по индексу:
SELECT *FROM item_statWHERE interval_id = 0 -- текущий "годичный" интервалORDER BY sum DESCLIMIT 10;
Если не совпадает (то есть наступил новый месяц, но продаж еще не было) -синхроннопересчитываем, как было описано выше (немного потупит, но всего один раз за месяц) и потом показываем, как описано выше.
(статья обновлена в мае 2021г.)
Какие системы управления базами данных (СУБД) распространены в мире больше всего? Как они изменились с 2006года и какие входят в десятку самых популярных? В этой статье мы проанализируем базы данных, которые были на пике популярности с 2006 по 2021год. Данные обновляются каждый месяц. Подробнее в индексе ведущих баз данных TOPDB. Итак, рассмотрим самые популярные базы данных с 2006 по 2021год.
Какая база данных стала самой популярной в 2021году? Согласно рейтингу БД, это Oracle. Этой базой данных пользуются 30,2% респондентов. В два раза меньше респондентов используют MySQL (16,65%) и SQL Server (13,21%) второе и третье места соответственно. В совокупности на долю этих трех СУБД приходится более 62% общего числа пользователей. На четвертой строчке расположилась СУБД Microsoft Access 9%. На долю баз данных, занявших пятое и последующие места, приходится менее 5%.
При этом Oracle занимает то же положение, что и 15лет назад. В мае 2006года этой СУБД пользовались 31,8% респондентов. На втором месте была MySQL 24,5%. В совокупности этими двумя базами данных в 2006году пользовались более 55% респондентов. Третью строчку в 2006году занимала СУБД Microsoft Access. Тогда ее использовали 17,6% респондентов, но в 2021году их количество сократилось почти вдвое и составило 9,07%. СУБД SQL Server с тех пор поднялась на одну позицию, и хотя ее показатель по-прежнему составляет около 13%, ей удалось обойти Access.
В мае 2021года лидером рейтинга DB-Engines остается Oracle. За ней следует MySQL, которая набрала 1236баллов, и Microsoft SQL Server 992,66балла.
Рейтинг DB-Engines март 2021года: Визуализация данных через платформу Flourish
Мы рассмотрели самые популярные базы данных в рейтинге TOPDB. TOPBD рассчитывает показатель так: Индекс ведущих баз данных TOPDB основывается на анализе частоты поисковых запросов в Google, содержащих названия баз данных. Но какие базы данных наиболее популярны в мире по версии DB-Engines?
На первых трех строчках размещаются все те же СУБД. Лидирует Oracle (1321,73балла), на втором месте MySQL (1254,83балла), далее Microsoft SQL Server (1015баллов). Но начиная с четвертой строки рейтинг меняется: по версии DB-Engines четвертой самой популярной в мире СУБД стала PostgreSQL, которая набрала 549,29балла.
Рейтинг DB-Engines Топ 10 наиболее популярных баз данных март 2021года: Визуализация данных через платформу Flourish
Еще один интересный пример: в TOPDB Microsoft Access занимает четвертое место, но в рейтинге DB-Engines Access набирает 118,14балла. В десять раз меньше, чем Oracle. (Подробнее о том, как рассчитываются показатели БД в этом рейтинге, можно прочитать по ссылкеhttps://db-engines.com/en/ranking_definition.)
Какие из 50 баз данных проявили себя лучше других в прошлом году, а какие не продемонстрировали блестящих результатов? Начнем с хорошего. Microsoft Azure SQL Database, PostgreSQL, Mongo DB и Snowflake показали высокий рост. Из них наибольший рост продемонстрировала СУБД Microsoft Azure (35,44%), а наименьший Snowflake (+20,77%). Показатели неплохо поднялись у Google BigQuery, Redis и Amazon DynamoDB. Среди них самый высокий рост наблюдался у BigQuery (+8,51%), а наименьший у Amazon DynamoDB (+6,38%).
Рейтинг DB-Engines Топ 50 наиболее популярных баз данных март 2021года: Визуализация данных через платформу Flourish
Наибольшую отрицательную динамику показали три базы данных: Microsoft SQL Server (82,55%), Oracle (18,91%) и Hive (9,34%). Однако некоторые из баз данных, показатели которых ухудшились по сравнению с показателями марта, по-прежнему занимают лидирующие позиции в общем рейтинге. Oracle, MySQL и Microsoft SQL самые популярные в мире базы данных в среднем потеряли по 35,55%.
Выше представлена интерактивная таблица рейтинга DB-Engines (ссылки на официальные данные можно найти здесь: https://db-engines.com/en/ranking). Вы можете посмотреть данные для разных столбцов.
Источники и полезные ссылки
Работая над этой статьей, я использовал несколько источников, в том числе рейтинги TOPDB и DB-Engines. Ссылки на источники указаны в статье.
Видео о самых популярных базах данных с 2006 по 2021год: https://youtu.be/thuG2PXVbBU
Статья о самых популярных игровых консолях: https://statisticsanddata.org/data/best-selling-consoles-in-history-1972-2021/
Перевод материала подготовлен в рамках курса Базы данных. Если вам интересно узнать о курсе больше, приглашаем вас на день открытых дверей онлайн на этой встрече сможете узнать подробнее о программе курса и особенностях обучения, а также познакомиться с преподавателем.