Pull to refresh
  • by relevance
  • by date
  • by rating

Вопросы про индексы, которые вам не надо будет задавать

Website developmentSQLMicrosoft SQL Server
Tutorial


После ответов на 14 вопросов об индексах, которые вы стеснялись задать, у меня возникло гораздо больше комментариев, уточнений и исправлений. Скомпилировать из всего этого статью выглядело затеей с минимумом пользы. И это заставило меня призадумался, а почему вообще мы должны «стесняться задавать» подобные вопросы? Стыдно не знать? А есть ли способ разобраться, не вгоняя себя в краску? Есть. Причем он избавит от многочисленных неточностей, которыми изобилуют многие «ответы». Вы будете чувствовать буквально каждый байт вашей базы кончиками своих пальцев.

Для этого, я предлагаю «поднять капот» у SQL Server и окунуться в сладостный мир шестнадцатеричных дампов. Может статься, что внутри все гораздо проще, чем вам казалось.
Читать дальше →
Total votes 36: ↑34 and ↓2 +32
Views44.4K
Comments 9

Лекции Технопарка. 1 семестр. Алгоритмы и структуры данных

ABBYY corporate blogMail.ru Group corporate blogProgrammingAlgorithms
Tutorial
Очередной пост в рамках нашего цикла лекций Технопарка. В этот раз мы предлагаем вашему вниманию курс, посвящённый алгоритмам и структурам данных. Автор курса — Степан Мацкевич, сотрудник компании ABBYY.

Лекция 1. Основы


Начало первой лекции посвящено обсуждению основных понятий, на которых строится вся дальнейшая программа курса: что такое алгоритм и структура данных. Описаны базовые виды алгоритмов, их характеристики и методы анализа. Далее рассматриваются примеры создания алгоритмов для вычисления чисел Фибоначчи, проверки числа на простоту, быстрого возведения числа в целую степень. В конце лекции рассказывается об особенностях использования алгоритмов для работы с массивами: создание однопроходных алгоритмов, поиск минимального элемента, бинарный поиск.


Читать дальше →
Total votes 52: ↑48 and ↓4 +44
Views120.5K
Comments 14

Новый алгоритм синхронизации Яндекс.Диска: как не подавиться 900 000 файлов

Яндекс corporate blogWebsite developmentAlgorithms
Яндекс.Диск — один из немногих сервисов Яндекса, частью которого является программное обеспечение для десктопа. И одна из самых важных его составляющих — алгоритм синхронизации локальных файлов с их копией в облаке. Недавно нам пришлось его полностью поменять. Если старая версия с трудом переваривала даже несколько десятков тысяч файлов и к тому же не достаточно быстро реагировала на некоторые «сложные» действия пользователя, то новая, используя те же ресурсы, справляется с сотнями тысяч файлов.

В этом посте я расскажу, почему так получилось: чего мы не смогли предвидеть, когда придумывали первую версию ПО Яндекс.Диска, и как создавали новую.



Прежде всего, о самой задаче синхронизации. Технически говоря, она состоит в том, чтобы в папке Яндекс.Диска на компьютере пользователя и в облаке был один и тот же набор файлов. То есть такие действия пользователя, как переименование, удаление, копирование, добавление и изменение файлов, должны синхронизироваться с облаком автоматически.
Читать дальше →
Total votes 120: ↑116 and ↓4 +112
Views93.3K
Comments 120

Глобалы — мечи-кладенцы для хранения данных. Деревья. Часть 1

InterSystems corporate blogHigh performanceNoSQL
Настоящие мечи-кладенцы баз данных — глобалы — давно известны, но до сих пор немногие умеют эффективно ими пользоваться или вовсе не владеют этим супероружием.

Если использовать глобалы в решении тех задач, в которых они действительно хороши, то можно добиться выдающихся результатов. Либо в производительности, либо в упрощении решения задачи (1, 2).

Глобалы — это специальный способ хранения и обработки данных, совершенно другой, чем таблицы в SQL. Они появились в 1966 году в языке M(UMPS) (эволюционное развитие — Caché ObjectScript, далее COS) в медицинских БД и до сих пор там активно используются, а также проникли в некоторые другие области, где требуется надёжность и высокая производительность: финансы, трейдинг и т.д.

Глобалы в современных СУБД поддерживают транзакции, журналирование, репликацию, партиционирование. Т.е. на них можно строить современные, надёжные, распределённые и быстрые системы.

Глобалы не ограничивают вас пределами реляционной модели. Они дают свободу для разработки структур данных, оптимизированных под конкретные задачи. Для многих приложений разумное использование глобалов может быть поистине секретным оружием, обеспечивая производительность, о которой разработчики реляционных приложений могут только мечтать.

Глобалы как способ хранения данных можно использовать во многих современных языках программирования, как высокоуровневых, так и низкоуровневых. Поэтому в этой статье я сфокусируюсь именно на глобалах, а не на языке, из которого они когда-то вышли.
Читать дальше →
Total votes 39: ↑28 and ↓11 +17
Views35.3K
Comments 336

Глобалы — мечи-кладенцы для хранения данных. Деревья. Часть 2

InterSystems corporate blogHigh performanceNoSQL
Начало — см. часть 1.

3. Варианты структур при использовании глобалов


Такая структура как упорядоченное дерево имеет разные частные случаи. Рассмотрим те, которые имеют практическую ценность при работе с глобалами.

3.1 Частный случай 1. Один узел без ветвей


Читать дальше →
Total votes 16: ↑12 and ↓4 +8
Views11.8K
Comments 192

Дерево разделов неограниченной вложенности и URL

Laravel
Tutorial
В данной статье мы рассмотрим один из возможных подходов к генерации полного пути на раздел, у которого может быть неограниченная вложенность в другие разделы, а также быстрое получение нужного раздела по заданному пути.

Представим, что мы программируем интернет-магазин, в котором должно быть дерево различных разделов, а также должны быть "приятные" ссылки на разделы, которые бы включали все подразделы. Пример: http://example.com/catalog/category/sub-category.
Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Views17.8K
Comments 12

Сравнение производительности иерархических моделей Django и PostgreSQL

Website developmentPythonPostgreSQLDjango

Добрый день, уважаемые читатели.


Сегодняшняя статья будет посвящена сравнению моделей работы с иерархическими данными в PostgreSQL, через Django приложение. В статья я специально не использую чистую реализацию в базе данных, т. к. меня интересует именно производительность в среде, приближенной к боевой.

Читать дальше →
Total votes 12: ↑10 and ↓2 +8
Views7.8K
Comments 19

Код Прюфера

Algorithms
Sandbox

Деревья. Кратко напомним


Дерево – частный случай графа. Деревья широко применяются в программировании. Дерево – это связный граф без циклов. Дерево называется помеченным, если каждой вершине соответствует уникальная метка. Обычно это число.


Читать дальше →
Total votes 41: ↑34 and ↓7 +27
Views45.5K
Comments 17

Как создать билборд-текстуру растительности в Unreal Engine 4

Plarium corporate blogWorking with 3D-graphicsComputer AnimationCGIGame design
Translation
В этой статье мы поговорим о том, как создать билборд-текстуру растительности в Unreal Engine 4. Такая растительность – это простой многократно размноженный четырехугольник, все копии которого всегда повернуты к камере. Я постараюсь привести доводы в пользу такого подхода, расскажу о потенциальных недостатках и отдельно затрону вопрос производительности.


Читать дальше →
Total votes 23: ↑23 and ↓0 +23
Views9.4K
Comments 0

Сравнение* древовидных графов

OracleProgrammingAlgorithms
Sandbox
Привет, Хабр!

* На самом деле не совсем так. При разработке информационной системы, частью которой является различная обработка конструкторско-технологической документации, у меня возникла проблема, которую вкратце можно описать следующим образом. Сегодня мы имеем один состав изделия, за день приходит несколько изменений по различным частям этого изделия и к вечеру уже неясно, что же изменилось? Изделия порой могут иметь более 10 000 элементов в составе, элементы не уникальны, а реальность такова, что изменения по составу могут активно приходить, хотя изделие уже почти готово. Непонимание объема изменений усложняет планирование.

Состав изделия можно представить в виде древовидного графа. Не найдя подходящего способа сравнения двух графов, я решил написать свой велосипед.
Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Views8.8K
Comments 14

О выборе структур данных для начинающих

ProgrammingGame development
Translation
image

Часть 1. Линейные структуры


Массив


Когда вам нужен один объект, вы создаёте один объект. Когда нужно несколько объектов, тогда есть несколько вариантов на выбор. Я видел, как многие новички в коде пишут что-то типа такого:

// Таблица рекордов
int score1 = 0;
int score2 = 0;
int score3 = 0;
int score4 = 0;
int score5 = 0;

Это даёт нам значение пяти рекордов. Этот способ неплохо работает, пока вам не потребуется пятьдесят или сто объектов. Вместо создания отдельных объектов можно использовать массив.

// Таблица рекордов
const int NUM_HIGH_SCORES = 5;
int highScore[NUM_HIGH_SCORES] = {0};

Будет создан буфер из 5 элементов, вот такой:



Заметьте, что индекс массива начинается с нуля. Если в массиве пять элементов, то они будут иметь индексы от нуля до четырёх.
Читать дальше →
Total votes 42: ↑40 and ↓2 +38
Views115.1K
Comments 31

Что будет, если каждому дереву выдать email

CrowdsourcingEcologyThe future is here


В 2013 году власти Мельбурна провели каталогизацию 70 000 городских деревьев (см. карту всех деревьев). Каждому из них присвоили персональный ID и соответствующий почтовый адрес. По задумке, так горожанам будет проще оперативно сообщать о возможных проблемах, вроде опасно свисающих ветвей.
Читать дальше →
Total votes 22: ↑20 and ↓2 +18
Views11K
Comments 24

Стартап создаст технологию, которая позволит сажать по миллиарду деревьев ежегодно

Popular scienceMulticoptersEcology
image

Стартап BioCarbon Engineering предлагает, пожалуй, лучший и наиболее естественный способ борьбы с избытком углекислоты в атмосфере – масштабное высаживание лесов. Но вместо весёлых субботников с привлечением населения, изобретатели хотят приспособить для этого технологии 21 века – беспилотные летательные аппараты.

Ручная высадка деревьев отнимает слишком много времени и ресурсов, и не успевает за промышленной вырубкой лесов. Сложно оценить скорость, с которой наша планета лишается её «лёгких» – по некоторым оценкам, до 80% лесозаготовок происходят незаконно, особенно в развивающихся странах.

По прикидкам продовольственной и сельскохозяйственной организации ООН, в 21 веке ежегодно на планете вырубают по 6 миллионов га. Это чуть больше площади Московской области. По их же оценкам, количество вырубаемых ежегодно деревьев составляет примерно 26 миллиардов, а новых посадок производится всего 15 миллиардов. Кстати, Россия занимает первое место в мире по скорости вырубки лесов – на её долю приходится почти половина добычи древесины.
Читать дальше →
Total votes 26: ↑24 and ↓2 +22
Views15.6K
Comments 33

Интервью с одним из участников стартапа, высаживающего деревья с коптеров

Popular scienceMulticoptersEcology
image

Моя статья про стартап BioCarbon Engineering, предлагающий приспособить для масштабной высадки деревьев беспилотные летательные аппараты, вызвала интерес читателей и породила многие вопросы. Напомню, что эта компания планирует высаживать по миллиарду деревьев в год.

Для высадки планируется использовать коптеры, которые будут разбрасывать капсулы, содержащие пророщенные семена деревьев. Высадка будет происходить на заранее размеченной и картографированной территории. По оценкам компании, два оператора дронов за день смогут высадить до 36000 деревьев. При этом стоимость работы составит не более 15% от стоимости посадки обычными методами.
Читать дальше →
Total votes 19: ↑17 and ↓2 +15
Views9.8K
Comments 7

Деревьев на Земле оказалось на порядок больше, чем считалось ранее

Ecology
image

Помню, в детстве, когда попадал в лес, задавался вопросом: «А сколько же в лесу деревьев?» Посчитать их мне не удалось, но думаю, что лесозаготавливающие компании должны как-то прикидывать количество деревьев на участке – например, умножить среднюю плотность на площадь.

Посчитать количество деревьев в большой стране – на порядок сложнее, а во всём мире – и того тяжелее, ведь плотность разных лесов разная, и даже лучшие спутниковые фотографии покажут вам только зелёные ковры из листьев. Конечно, спутниковые снимки всё равно помогали учёным примерно оценивать богатства нашей планеты. Например, количество деревьев на всей Земле до недавнего времени по этим снимкам оценивалось в 400 миллиардов.

image

Но недавно учёные из университетов и институтов 15 стран (в том числе и российские учёные из Центра по проблемам экологии и продуктивности лесов РАН) под руководством эколога Томаса Кроутера (Thomas Crowther) закончили большую работу по обработке огромного количества данных со всех уголков планеты по поводу реальной плотности лесов в разных её частях. Плотность лесов подсчитывалась просто — вручную. Этим занимались различные экологические институты и организации, и выкладывали результаты работы в интернет.

В результате учёные получили первую глобальную подробную карту лесов, учитывающую не только площадь покрытой лесом земли, но и данные по плотности зарослей. Оказалось, что деревьев на планете почти в 8 раз больше, чем считалось раньше: около 3 040 000 000 000, или чуть более 3 триллионов.
Читать дальше →
Total votes 15: ↑13 and ↓2 +11
Views13.4K
Comments 13

Самый полный русскоязычный перевод Гарвардского курса по программированию CS50 2015, бесплатно на YouTube

Programming
Sandbox
В этой статье я хочу немного рассказать о самом лучшем в мире курсе по программированию.

С 2013 года наша небольшая команда занимается переводом и адаптацией англоязычных видеокурсов. За это время мы перевели и адаптировали свыше 150 часов материала. Перед тем как приступать к работе, мы анализировали материалы нескольких обучающих онлайн-школ, и выбирали, на наш педагогический взгляд, самую лучшую, которая максимально доступно, структурированно и кратко подаёт обучающий материал. В результате чего нам приходилось просматривать по несколько курсов касающихся одной и той же тематики, а после выбирать тот, который наиболее качественный и доступный для понимания новичкам.

Как оказалось, действительно качественных курсов и преподавателей не так уж и много. В русскоязычном обучающем пространстве достаточно часто встречаются пересъёмки или адаптация зарубежных курсов, которые пользуются популярностью у американских или европейских специалистов.

image
Читать дальше →
Total votes 19: ↑18 and ↓1 +17
Views50.3K
Comments 27

Как сгенерировать гипотезы о потребностях потенциальных потребителей вашего будущего продукта

Start-up developmentProduct ManagementReading room
Подавляющее большинство бизнесов умирает потому, что предлагают продукт, который не нужен потребителям. Это известное высказывание Эрика Риса, автора методики Lean Startup. Как не попасть в эту ловушку со своим проектом?

Ответ прост – прежде чем делать продукт, нужно провести исследование для выяснения спроса на ваш будущий продукт. Любой продукт существует, чтобы решать какие-то задачи потребителей. Поэтому начать исследование стоит с составления набора гипотез о потребностях потребителей. То есть придумать ответы на вопрос – какие проблемы и затруднения поможет решить ваш будущий продукт?

Создание гипотез – это творческий процесс и трудно вести его строго по определенному алгоритму, но стоит попытаться. В этой статье я описываю такой алгоритм, который поможет создать набор гипотез для последующей их проверки с помощью проблемных интервью.

image
Читать дальше →
Total votes 10: ↑9 and ↓1 +8
Views7.9K
Comments 0

Случайные перестановки и случайные разбиения

Mathematics
Sandbox
Я много лет читаю курсы по комбинаторике и графам для студентов-математиков и computer scientists (как это по-русски, компьютерных научников?), раньше в Академическом университете, а теперь в СПбГУ. Программа у нас построена так, что эти темы проходят как часть «теоретической информатики» (другие темы в ней — алгоритмы, сложность, языки и грамматики). Не могу сказать, насколько это оправдано метафизически или исторически: всё же комбинаторные объекты (графы, системы множеств, перестановки, клетчатые фигуры и др.) начали изучали задолго до появления компьютеров, и сейчас последние хотя и важная, но далеко не единственная причина интереса к ним. Но так посмотреть на самых спецов по комбинаторике и по theoretical computer science — это удивительно часто одни и те же люди: Ловас, Алон, Семереди, Разборов и далее. Наверно, есть на то свои причины. На моих уроках часто очень нетривиальные решения сложных задач предлагают чемпионы олимпиадного программирования (их перечислять не буду, кому любопытно посмотрите топ codeforces.) В общем, думаю, что некоторые вещи из комбинаторики могут быть интересны сообществу. Говорите, если что так или не так.
Читать дальше →
Total votes 12: ↑11 and ↓1 +10
Views3.6K
Comments 3

Работа с иерархиями в lsFusion

lsFusion corporate blogOpen sourceProgrammingInterfacesERP-systems
Tutorial
image

В различных приложениях часто возникает потребность в реализации иерархического представления объектов. Как правило, это используется для их классификации путем задания групп. Эти группы образуют дерево динамической глубины, которая в дальнейшем используется для навигации, агрегирования данных, задания параметров.

В этой статье я покажу, каким образом эту логику можно реализовать в открытой и бесплатной платформе lsFusion.
Читать дальше →
Total votes 15: ↑14 and ↓1 +13
Views1.9K
Comments 0

Как получить по индексу элемент из бинарного дерева за приемлемое время?

ProgrammingAlgorithmsMathematics
Привет, Хабр!

Полгода назад я задумался, как можно было бы получить элемент из бинарного дерева за O(log(N)). Ответ пришёл довольно быстро — Lazy Propagation. Но реализовать это в коде я поленился. Сейчас надо сдавать дипломный проект в университете, поэтому я занимаюсь чем угодно, только не им. Именно так я и сел это реализовывать.
Читать дальше →
Total votes 11: ↑9 and ↓2 +7
Views3.7K
Comments 17