Базы данных. Тенденции общемировые и в России / Хабр
Эта статья не является ответом на множество вопросов по базам данных (БД) и системам управлениям базами данных (СУБД). Я как автор выражаю своё собственное мнение о трендах, стараясь опираться на беспристрастные показатели, статистики и т.д., но для примера приводя собственный опыт. Я не являюсь ангажированным представителем какой-либо компании и выражаю точку зрения опираясь на опыт более 25 лет работы с разными СУБД, в том числе, которую создавал своими руками. Не так много даже опытных программистов и архитекторов, которые знают все термины, технологии, какие подводные камни и куда идёт движение. Тема поистине огромная, поэтому в рамках одной статьи не раскрыть даже верхний уровень информации. Если кто-то не встретит свою любимую СУБД или её невероятный плюс, который стоит упомянуть, то прошу в комментариях указать и этим дополнить общую картину, что поможет другим разобраться и понять лучше предметную область. Поехали!
Open Source DBMS vs Commercial DBMS
Для начала приведу график с сайта, db-engines. com, по моим ощущениям, неплохо отслеживающим тренды БД. Именно этот график добавил желания написать статью о текущем положении дел. Когда мы говорим фразу «база данных», то на самом деле чаще имеем в виду конкретную систему управления базами данных (СУБД), поэтому если в тексте встретится БД вместо СУБД, то это в силу такой привычки.
Open Source DBMS – системы управления баз данных с открытым исходным кодом догнали коммерческие СУБД с закрытым исходным кодом. Open Source 49.98% против 50.02% у Commercial. Итогом 2020 года становится момент, когда можно будет сказать, что open source не менее популярны. Как вы видите, эта ситуация возникла не внезапно. Подсчёт на графике не в численном соотношении, а в очках, которые набирают те или иные системы.
Для интереса можете посмотреть на сайте где находится ваша любимая СУБД в рейтинге. Итогом последнего года стал вылет Microsoft Access из десятки, он вместе с языком программирования COBOL напоминает, что жизненный цикл технологий может быть очень длинным. Полагаю, что в следующем году IBM DB2 будет опускаться сильнее всего в топе. Топ 10 СУБД – это 75% всех набранных баллов. За год топ 10 в очках почти не поменялся.
Open Source вырос качественно за последние годы и всё больше ИТ специалистов, принимающих решение задаются вопросом, а стоят ли лицензии Oracle, MS SQL, IBM DB2 и прочих коммерческих продуктов, чтобы в них вкладываться. Не в малой степени этому способствуют аппетиты одноимённых компаний. В последние годы стало модно в коммерческих продуктах продавать enterprise licenses (лицензии уровня предприятий без искусственных ограничений функционала) за ядра процессоров. Можете по ссылке посчитать, что выходит для сервера с 4 процессорами по 16 ядер — всего 64 ядра если вам не подходят лицензии за пользователей.
MS SQL — 439 936$
Oracle — 1 368 000$
Мало того, запутанная система лицензирования, в которой не всегда разбираются даже в компаниях, продающих эти лицензии приводит к ситуации, когда к вам придут и скажут, что вы не докупили лицензий за нечто на сумму большую чем вы уже приобрели и заложили в бюджет. И это не редкая ситуация.
Прошлый 2019 год и текущий 2020 проходили с растущим влиянием компании AMD и её центральных процессоров, включая серверные EPYC, которые кардинально меняют стоимость физических ядер, а это значит, что ядер будут покупать всё больше. Многоядерность AMD развилась с внедрением чиплетов и теперь 64 ядра в одном процессоре — это реальность. Готовы ли будут компании покупать платные лицензии платных СУБД на ядра в разы больше? Не уверен. Физический сервер будет получаться по стоимости на порядок ниже лицензий. Серверный рынок довольно инертный и на AMD не перейдут и за несколько лет, но Oracle, Microsoft и прочие начнут терять долю ещё быстрее если не изменят политику. Microsoft выпускал версию SQL Server для Linux, но опять же за деньги и не нашлось большого числа желающих её купить. IBM DB2 теряет долю рынка уже давно.
Переход многих компаний на микросервисы (наверняка слышали на российских конференциях и форумах «мы пилим монолит на микросервисы») зачастую приводит к отделению данных физически на разные сервера, для коммерческих СУБД это платные лицензии, для Open Source нет. Чтобы не выйти из бюджета выбирают бесплатные решения.
Уместно будет сказать, что бизнес коммерческих СУБД выгоден и ими владеют богатейшие люди планеты. В топе самых богатых людей оказываются владельцы компаний, владеющих коммерческими СУБД: Билл Гейтс (Microsoft), Ларри Эллисон (Oracle), которые занимают значительную долю в топе СУБД. Ещё из топ 10 списка Forbes богатейших людей, у которых есть огромные или облачные БД присутствуют Джефф Безос (Amazon RDS), Ларри Пейдж и Сергей Брин (Google с их Bigtable).
В последнее время крупные ИТ компании с большими деньгами развивают open source проекты. Можно было бы подумать, что они прониклись идеями сообщества открытого кода, хотят сделать полезное для общества, их наполнило человеколюбие и прочее меценатство. Но нет, нужно понимать, что крупные акулы в бизнесе рассчитывают на некотором этапе монетизировать эти вложения, повысить положительное мнение о своих компаниях, занять рынки, воспользоваться бесплатным трудом сообщества, взять выстрелившие идеи. Шутка ли тысячи светлых голов коммитят в репозитории качественный код, тестируют на реальных проектах и денег не просят.
Тот же MySQL несмотря на название open source был уже продан за 1 млрд.$, Sun Microsystem, а потом поглощён Oracle. Основатель MySQL Майкл Видениус переоткрыл проект назвав его MariaDB. Я был на его выступлении в Москве где он призывал переходить на их продолжение оригинальной СУБД и надо сказать, что немалая часть разработчиков так и поступило. MariaDB уже на 12 месте.
Коммерческие СУБД дороги, но есть и масса плюсов, они стабильны, удобны, легко интегрируемы в ИТ инфраструктуру, есть система подготовки специалистов, сторонние компании расширяют функционал. Плюсом open source помимо бесплатности и растущей части возможностей платных СУБД можно считать и то, что вы можете взять код БД и поменять под свои нужды, как делал Facebook c MySQL. Для одной СУБД open source может быть несколько движков или несколько веток развития и вы можете выбирать любой вариант, который вам подходит. Влетевшая в топ 10 SQLite — мультиплатформенный продукт. Это персональная БД не использующая парадигму Сервер-Клиент, когда вам нужно с минимальными затратами просто локально хранить данные для приложения и пользоваться всеми плюсами СУБД.
Что в России: Нужно понимать, что когда в 70-80 годах году появились первые коммерческие продукты, например Oracle, у нас ещё был Брежнев, Олимпиада в Москве, перестройка, отставание в электронной промышленности и т.д. Мы пока догоняем или развиваем существующие системы.
Первые версии СУБД в мире были коммерческие, распространялись точечно, требовали присутствия специалистов. Покупать программное обеспечение (ПО) за валюту в нашей стране исторически не всегда принято (опустим обсуждение политических и экономических мотивов), поэтому альтернатива в виде бесплатных СУБД и пиратских версий коммерческих продуктов присутствуют. В институтах сейчас часто учат на бесплатных движках БД, открытое ПО – это стильно, модно, молодёжно. Поэтому рынок очень быстро наполняется специалистами в области open source. В России есть разработки СУБД в виде ClickHouse, Tarantool, ветки PostgreSQL и т.д., коммерческих экспортируемых БД нет. Есть реестр российских программ где можно поинтересоваться текущим положением дел по отечественным СУБД. Состав правда вызывает сомнение, например, наряду с названиями, которые вы могли слышать встречаются и с названием типа «Паспортный стол общежитий ВУЗа».
Переход на open source в России ускорился и в связи с санкциями. Помнится, выходившая новость об Oracle о возможном запрете продавать технологии для нефтегазовой отрасли России поменяло вектор видения будущего в умах и бюджетах некоторых наших компаний с хорошими бюджетами на ИТ. Как выше сказал фраза «мы пилим монолит на микросервисы» зачастую приводит в Open Source. В России, да как и во всём мире, растут PostgreSQL, MySQL, SQLite, MongoDB проекты.
Многим могло показаться, что open source давно обогнал commercial, но это мнение может сложиться если вы относитесь к миру online проектов, сайтов, приложений для смартфонов и т. д. Из этого следует следующее сравнение online vs. offline.
БД online проектов против offline
Есть 2 класса проектов, которые в чём-то похожи, а в чём-то нет. Это проекты с основным направлением онлайн продаж или оффлайн бизнес.
Если вы берёте классический бизнес оффлайн, связанный с добычей природных ресурсов, банковским делом, дистрибьюцией (оптовые продажи) или ритейлом (розничные продажи), то развивался он чаще всего из стека технологий на базе Windows решений. И переходя в онлайн он может использовать стек технологий WISA (Windows, IIS, MS SQL, ASP.Net). Есть и онлайн проекты изначально на WISA, для примера, всем известный StackOverflow. На текущий момент, в чисто онлайн проектах доминирует стек технологий типа LAMP (Linux Apache MySQL PHP). Новые молодые команды, приходящие в существующий бизнес, часто не работали с Windows стэком технологий и предлагают переписывать существующие системы. В России эта тенденция очень хорошо ощущается в последние годы.
Деньги любят счёт, и чтобы сравнить долю онлайн или оффлайн проектов давайте посмотрим рейтинг по выручке в мире. В топе ритейл, добыча ресурсов, автомобилестроение и т.д. В крупнейших компаниях (не только России) обычно зоопарк из технологий, тут будут ERP, CRM системы в виде SAP, Microsoft Dynamics NAV или AX, 1C в России и много чего ещё. Компании с большим оборотом используют разные системы управления предприятием, которые в свою очередь часто используют коммерческие БД, Oracle, MS SQL, IBM DB2.
Но капитализация компаний в мире за последние 10 лет изменилась и мы видим, что в топе теперь ИТ гиганты и всего 2 компании из прошлого топа Microsoft и Alphabet (Google). В динамике изменения тут. Это значит смещение денежного потока в онлайн. Мы все уже привыкли и платить онлайн и переводить деньги, покупать товары с доставкой и т.д. А текущий 2020 год принёс немало прибыли именно онлайн компаниям.
Рейтинг компаний России по выручке. На первых местах добыча ресурсов, банки, ритейл, а не ИТ корпорации. Яндекс на 113 месте. Правда по капитализации Яндекс входит в топ 20. Тенденции по внедрению большего числа решений с open source есть, причины описаны выше. Исторически многие крупнейшие онлайн-ритейлеры (магазины) в России на платных БД, но задумываются над переходом тестируя части функционала на open source. Банки начали миграцию в онлайн, пример Тинькофф банка подтверждает, что нужно развивать онлайн банкинг.
По итогам года из-за текущей ситуации с вирусом явно число и размер online проектов выросло. Растут и облачные решения, об этом ниже.
Реляционные СУБД против остальных
Обилие статей в том числе на Хабре про разные виды БД вводят в заблуждение, что весь мир уже перестаёт использовать классические реляционные СУБД. На самом деле RDBMS – это подавляющее большинство всех СУБД в мире. На другие виды приходится около ¼ части и нужно понимать, что это чаще всего специфический функционал.
Для примера скажу, что в данный момент изо дня в день в работе типичной крупной компании может широко использоваться одновременно разные СУБД как платные MS SQL(Oracle) и ещё набор из MongoDB, Redis, MySQL, ClickHouse, ElasticSearch и т. д.
Рассмотрим очень кратко основные типы:
Relational: Главный тип, который ассоциируется с БД. Данные хранятся в виде 2-мерных таблиц с определёнными столбцами и строками, в которых хранятся значения. Индексы используются для ускорения поиска по указанному в создании индекса полю или полям. Связь между 2 таблицами идёт по одинаковым полям в них – ключам (Key). Для добавления, изменения, удаления данных используется язык SQL (Structured Query Language), о нём ниже. Описание структуры данных хранится в самой же БД в данных системных реляционных таблиц. Эта простая идея с 2-мерными таблицами выдержала проверку временем и продолжает быть самой распространённой.
Document stores:
Отличие от реляционных БД в том, что данные хранятся в виде документов с любой структурой. То есть колонки таблицы жёстко не определены. Но тем не менее можно создавать индексы, которые вставляют ссылку на строку если находится указанный аттрибут документа. Типичный представитель MongoDB – хранение документов используя синтаксис JSON (Java Script Object Notation). На самом деле BSON (Binary JSON), который компактнее, как и любые бинарные типы чем строковые.
Вот так выглядят строки в коллекции (это аналог таблиц)
Точно также таблицы могут ссылаться друг на друга.
Key-Value : появился этот тип NoSQL решения из-за необходимости быстро записывать, менять и получать значения по какому-то параметру. Не редко это используют для некритичных, быстроменяющихся значений, которые нет смысла записывать и хранить. Типичный представитель – Redis. На старом ноутбуке вы можете получить десятки тысяч операций в секунду по записи, изменению данных. Достигается это тем что данные хранятся в памяти, с которой операции быстрее. Отсюда же и минус, что если памяти недостаточно, то скорость будет деградировать. Например, вы хотите измерять число запросов с 1 IP за минуту. Заводится строка где ключ это IP, любое обращение добавляет счётчику +1. Если запросов много, то троттлинг (ограничение). Ключ может иметь TTL и обнуляться раз в X минут.
Search Engines: Поиск – это важная функция в любой системе. Если c поиском по точному совпадению в виде ID (кода, артикула, партномера и т.д.) реляционные БД справляются очень качественно и быстро, то поиск внутри документа по фразе, включая использование разных форм слова, множественного числа и прочих составляющих живого языка уже не выходит так быстро. Нужно сканировать данные от начала до конца и выискивать походящие документы. Поэтому поступают так как делают крупные поисковики индексируя страницы, если представить по простому, то они проходят по документам предварительно, составляют список слов, которые встречаются в документе и когда нужен поиск, то ищут по преподготовленным спискам слов с ссылками на документы, чем больше слов совпало тем вероятнее, что этот документ и нужен. Типичный представитель ElasticSearch его большое число инсталляций обусловлено ещё и тем, что существует типичный стек ELK (англ. лось) ElasticSearch+Logstash+Kibana для мониторинга событий, например, логов веб серверов или сервисов.
Wide column stores: Лучше всего представлять как среднее между реляционной БД и Key-Value БД. Есть таблицы, строки и колонки. Но колонки не имеют жёсткой структуры и могут иметь в разных строках разные названия и значения.
Представители этого типа БД – Cassandra, HBase.
Graph : Тип БД, который призван обрабатывать данные, которые представлены в виде графов. В виде графов можно представить населённые пункты (вершины) и дороги между ними (ребро). Типичная задача поиск нахождения кратчайшего маршрута между пунктами путём обхода графа в ширину или более продвинутыми алгоритмами.
Также удобно представлять графами связи между людьми (вершины), что он знает кого-то (ребро) или их возраст и интересы. Формула химического соединения можно представить, что вершины графа — атомы молекулы, а рёбра это химические связи между атомами. Теория графов обширна и развивается с 18 века, так что математическая база накоплена большая. Типичный представитель графовой СУБД — Neo4j.
Columnstore
Хотя в рейтинге db-engines этот вид не идёт отдельно, а относится к реляционным, но стоит его упомянуть. Коммерческие реляционные СУБД включают в себя и этот вид как отдельную особенность, но и существуют специализированные отдельные решения. Основное отличие колоночных БД, что данные хранятся не в строках, а в столбцах. Если у вас в столбце одни и те же значения, то они очень сильно компрессируются и меньше места занимают на диске и в памяти. Представители этого типа ClickHouse, Vertica. Эту картинку с анимацией лучше смотреть на сайте ClickHouse.
В последнее время стала появляться в диаграммах СУБД ClickHouse от Яндекса. Цифры разные, но то что её стали замечать и включать уже хорошо для её развития.
Multi-model databases
Во многих СУБД, помимо основного исторического типа хранения добавлялись новые с течением времени. Мир не стоит на месте, поэтому если создатели СУБД видели необходимость поддержать другие типы хранения данных, то они добавлялись. Поэтому у большинства современных СУБД из топа в описании может присутствовать «multi-model». Перевод крупных реляционных СУБД в разряд multi-model ограничила рост многих NoSQL решений в последние годы. Зачем использовать что-то ещё, если нужный тип включен в основную СУБД как вторичный.
SQL vs NoSQL
Сам термин NoSQL возник чуть более 10 лет назад примерно в 2009 году и как говорят сейчас «пошёл хайп». Многие новые программные продукты, которые были призваны решить некую проблему присущую связке Реляционная БД + SQL гордо начали именоваться NoSQL, чтобы показать, что они новые и продвигают невиданные доселе технологии способные решить много проблем. А проблемы действительно были. Нужна была возможность легко горизонтально масштабировать решения в связи с ростом данных, которые могли прибывать в больших количествах, объёмы данных стали резко увеличиваться. Причём стали сохраняться данные, которые не были структурированы, например, с сайта информация на что кликал, куда переходил пользователь, что искал, какие элементы всплывали, баннер показывался и т. д. Всё это сваливается и хранится. Сейчас вы и не удивляетесь, что вам упорно показывают рекламу по теме, которая вас однажды заинтересовала, вас уверенно ведут к воронке принятия решения, о покупке, подписке и т.д.
График роста данных, он немного не свежий, но показывающий рост данных более 10 лет назад.
По своему опыту скажу, в 0-вых годах оффлайн компании генерили больше долларов выручки на 1 Gb данных в БД, чем сейчас онлайн компания. И соотношение примерно раз в 100-200 меньше долларов на Гб у онлайн.
Второй вытекающей из роста данных проблемой SQL были тяжелые транзакционные операции по записи в БД и не могли достигать показателя 10 или 100 тысяч в секунду на простом оборудовании. Я не буду сейчас распространяться, что есть плюс, а что минус транзакций, но оказалось, что можно ускорить транзакции, упростить их или часто они не нужны. Не нужны если данных так много, что потеряв некоторые вы восстановите всю картину запросто на оставшихся данных. Не все данные важны настолько, что их частичная потеря критична для бизнеса.
И появились простые, но эффективные NoSQL системы, которые решают проблемы, не связанные накопленными ограничениями SQL, работают быстро и чаще всего ещё и бесплатные. Но чудес не бывает, поэтому часто NoSQL решения имеют ограниченный функционал или работают быстро пока не кончится какой-нибудь ресурс, например, оперативная память или число коннектов.
Часто можно встретить такого рода картинки классификаций NoSQL БД по типам и с примерами СУБД. Выше мы их рассмотрели.
A что же SQL – Structured Query Language – структурированный язык запросов? Он существует с начала 1970-х годов, был стандартизирован и благодаря этим стандартам, которые поддерживают все создатели реляционных БД минимизирует разницу в работе с разными реляционными СУБД. Да, производители вставляют свои собственные фичи (features — особенности), которые могут выходить за пределы стандартов SQL, так как предлагают некую новые конкурентные технологии, если они будут поддержаны массово, то эти новые технологии и их описание будут включены со временем в стандарт SQL. Если вы пишете SQL запросы в одной СУБД, то вам не составит большого труда перейти на другую и продолжить работать с ней. Мало того, часто в клиентах NoSQL СУБД, есть фишка в виде запросов на SQL. Например, для MongoDB я часто использую Studio3T, где вы можете писать обычный SQL и он переводится в специализированные запросы MongoDB, для самого MongoDB есть SQL адаптер. ClickHouse и Tarantool (российские разработки) поддерживают SQL запросы. Также во многих NoSQL СУБД появились особенности присущие SQL, например, join-ы, схемы данных, логика NULL для значений и т.д.
Cloud DBs vs DBs
Облачные технологии постепенно растут. Рост этот составляет десятки и сотни процентов в год на разные облачные технологии. Среди них есть и облачные БД. Если в любой области экономики есть рост с такими цифрами значит всё больше усилий будут прилагать компании, чтобы занять этот рынок и получить свой кусок пирога, а дальше заинтересовать побольше клиентов и включить их в этот пирог растущий дальше. Да, мы с вами – это часть их пирога. На Хабре много статей про облака, плюсы и минусы, чтобы не повторяться можно почитать например, тут или в другой статье по соответствующим тэгам.
По оценкам Gartner объём всего облачного рынка за 5 лет вырастет в 2 раза.
Вот такие распределения по компаниям если брать BPaaS и IaaS. По моим ощущениям очень похоже на правду. AWS лидер, Microsoft понемногу догоняет в последние годы, Alibaba растёт и дешевле всего на рынке Китая, который уже нельзя игнорировать глобальным компаниям.
Рынок БД в облаке (DBaaS) выглядит в цифрах гораздо скромнее по сравнению с цифрами всех облачных трат, при том, что каждая компания имеет свои БД и не малые.
Объясняется это такими факторами:
Зачастую компании не используют специфичные облачные БД провайдера, потому что нужно адаптировать приложения, есть особенности, которые не позволяют это делать. Чаще сейчас используется облачная инфраструктура, то есть вы получаете свои виртуальные хосты с CPU, RAM, SSD(HDD) и используете её, чтобы там установить экземпляры стандартных СУБД.
Компании не спешат переводить именно данные в облако, переводя туда другие сервисы. Встаёт вопрос безопасности данных. Одно дело, когда ваши данные в конкретном точном месте вашей сети, физических хостингов, пускай и распределённых по миру, а другое когда вы затолкали данные в чёрный ящик поставщика облачных услуг и вам непонятно как, где оно хранится, как охраняется и т.д.
Кто столкнулся с облаками, тот знает, что траты могут возникнуть откуда вы не ждёте и соответственно не просчитали стоимость. Приведу пример, положить данные на хранение в холодное облачное хранилище стоит не дорого, а вот скачать обратно уже в десятки или сотни раз дороже. Поэтому если вы делаете бэкапы и храните их не трогая, то это дешевле своих дисков, но вот когда захотите обратно скачать, то сначала вы подождёте много часов до извлечения, а потом заплатите значительную сумму за каждый Mb. И такая ситуация и для AWS и для Azure и остальных. Вот недавняя история про NASA, когда им аудиторы сказали, что будут платить гораздо больше. Случаи перерасходов бюджетов от роста функционала сплошь и рядом.
Скорости перемещения информации из облака иногда удручают. Например, вы сделали бэкап на одном хостинге в облако, а потом решили поднять на другом хостинге. Это же облако. Но если вы и подключили платную опцию, что у вас распределённое хранение данных во многих регионах, то вас может неприятно удивить скорость восстановления в соседнем штате США. Если бэкап на сотни Gb, то в разы будет быстрее сделать бэкап на локальный диск, скопировать по выделенному каналу бэкап и поднять его на другом хостинге.
Могут возникать небольшие изменения производительности, которые трудно чем-то объяснить как работой соседних виртуальных хостов, которые разделяют с вами физический хост провайдера. Если вы работали с виртуальными хостами в локальной сети, то наверняка сталкивались как могут влиять друг на друга загруженные виртуальные сервера на одной физике. В своей сети вы можете на это повлиять или сделать замеры вынося виртуальные сервера с физического сервера.
Если вас подсадили на облака, то вы зависите от этого провайдера облачных услуг, а это ещё одна точка отказа в вашей информационной инфраструктуре. Например, Alibaba выключает ресурсы не глядя, как только пробьёт 12 часов и что-то у вас превратится в тыкву по причине того, что на вашем счете в облаке нет заранее добавленных юаней.
В России к этому добавляется ситуация, что не так давно проводилась масштабная блокировка зарубежных ресурсов, блокировали многое включая IP адреса облачных БД. Это реальность и она может быть во многих странах.
В связи с санкциями применяемых к России у отечественных компаний возникают вопросы с хранением данных в облаках американских компаний из топа. Нет гарантий, что завтра все ваши данные не пропадут вместе с отключённым аккаунтом. Отключать облачные аккаунты можно очень быстро и удобно.
В России есть Яндекс.Облако, SberCloud, честно не пользовался ими в плане БД. Был опыт использования других сервисов Яндекса, которые потом перевели в облако, поменяли протоколы и сделали платными. Пока не заинтересовали платить деньги, так как есть другие поставщики как Microsoft, Google, которые имеют бесплатные квоты для небольших объёмов и есть ещё ряд преимуществ.
Подводя итоги: переход в облака идёт в мире чуть быстрее чем у нас, мне известны целые компании на западе, которые перевели почти всё в облака и это их стратегия, но доля таких ещё гораздо меньше кто ещё это не сделал. Для иллюстрации вот такой график c указанием совокупного среднегодового темпа роста.
Если вам нужно развернуть быстро в любой точке мира функционал, то альтернативы облакам нет, но будьте готовы потом оплачивать счета соразмерные потраченным ресурсам, про которые вы и не подозревали. Нужно просчитывать заранее траты или пробовать в реалиях. И безопасность в облаках ещё не убедительна.
В России цены на облачное хранение данных ниже чем в мире, но иностранные компании не стремятся хранить здесь данные, поэтому развиваются они чаще за счёт государственных заказчиков и не очень большой доли компаний.
OLTP vs OLAP
Данные в БД могут использоваться для проведения текущих операций бизнеса Online Transaction Processing (OLTP): найти клиента, выписать счёт, оплатить ресурс, списать остаток со склада при заказе товара и т.д. Почти все эти операции должны проводиться в режиме реального времени. Если пользователь на сайте или во внутрикорпоративной системе ожидает по несколько секунд простые операции и это проблема с БД, то значит есть что оптимизировать. OLTP – изначально проектируются для ведения бизнеса в реальном времени. Если компания имеет базы данных, то там есть OLTP.
Есть данные, которые используются для анализа работы компании Online Analytical Processing (OLAP). То есть для OLAP собираются большие массивы данных и чтобы их быстро просчитывать в любом разрезе нужна простая магия по предрасчитыванию всего, что с наибольшей вероятность может понадобится бизнесу. То есть если вы хотите знать количества кликов на вашем глобальном сайте по странам или страницам, то их нужно заранее просчитать да ещё делая эту группировку по времени, чтобы потом смотреть динамику во времени, сравнивать с историческими трендами. И OLAP хранилища могут быть не реляционными да и вообще не структурированными, использовать специализированные языки управления большими массивами данных, или языки для статистической обработки данных. В последнее время стало модно называть обычных специалистов по аналитике в бизнесе Data Scientist. Это не совсем верно, но термин уже прижился. Обычно это смесь из следующих ингредиентов SQL, Python, R, фреймворков для работы с нейронными сетями, математическими моделями разного вида и т.д.
Количество OLAP БД обычно меньше в количественном отношении чем OLTP, но размеры их больше. Для OLAP БД важна поддержка многопоточности, когда запрос распараллеливается между ядрами и каждое ядро делает свою часть работы. Если ваша OLAP СУБД умеет шардироваться на много серверов, хорошо работает с многопоточностью, поддерживает все последние SIMD (single instruction, multiple data) инструкции процессоров, когда за 1 операцию обрабатываются большие пакеты данных, то скорость обработки данных увеличивается кратно на все эти множители.
Общая тенденция такая, что аналитику отделяют от данных необходимых для операционной деятельности. Вынос аналитических данных, обычно может состоять из выноса на отдельные сервера где можно считать, что угодно не влияя на работу компании. Для просчётов нейросетей и прочих тяжёлых математических моделей используют облака с услугой облачных вычислений на специализированных платах, например, NVidia Tesla.
SSD vs HDD vs Storage vs Tape vs Other
Эта часть о том на каких хранителях хранить данные для БД.
В 2020 году не остаётся сомнений в том, что SSD побеждают в борьбе с HDD. В серверных системах с БД это понимание пришло гораздо раньше, чем где либо. Всё дело в том, что в большинстве типов БД, важно не последовательное чтение, а чтение в память из разных мест с диска. И такая же случайная запись для данных. С этим нет проблем у SSD, тогда как скорость доступа до случайного места на диске у HDD достигается скоростью вращения шпинделя и скоростью перемещения считывающего механизма между дорожками. Попробуйте одновременно копировать несколько десятков файлов на HDD из разных мест, скорость быстро деградирует до неприемлемых значений. Так и запросы данных от 1000 пользователей, которые лежат в разных местах диска быстро сведут на нет скорость любого HDD. Поэтому для операционных OLTP систем нет большого смысла использовать HDD. На картинке ниже обычные SSD c 6000 IOPS (операций считывания и записи на диск в секунду), в серверных решениях особенно с NVME есть гораздо больше, но стоит отделять маркетинговые цифры на коротких замерах, попадающих в кэш от реальной работы диска в таком режиме круглыми сутками.
HDD есть смысл использовать в OLAP системах, когда данные лежат последовательно и их нужно читать и записывать только так или есть смысл использовать для бэкапов данных, это крупная последовательная запись и чтение. Также в больших архивных БД и везде где стоимость хранения 1 Гб – это решающая единица. HDD дешевле SSD по стоимости за 1 Гб.
По отказоустойчивости SSD лучше HDD если их рассматривать как отдельные устройства. Это личный опыт на тысячах экземплярах. Выходы из строя SSD гораздо реже HDD, но нужно понимать, что это статистика по серверным моделям, многие из которых производились по нормам SLC и MLC, стоящие дороже, позволяющие перезаписывать данные гораздо больше раз чем продвигаемые сейчас TLC и QLC, которые не рекомендуются для БД. Для серверных систем где хранятся БД используют диски и комплектующие с повышенной отказоустойчивостью. SSD диск в 1Tb и стоимостью 1000$ — это нормальная ситуация для БД. В них заложены возможности работать месяцами на пределе, не только много читая, но и много записывая, не перегреваясь или резко сбрасывая скорость. Не нашлось картинки по сравнению отказоустойчивости серверных SSD и HDD, но есть про обычные. SSD выходят из строя реже.
Форм-фактор SSD – это 2.5 дюйма устройства для горячей замены, PCI-X карты, U.2– серверный аналог M.2, который в настольных компьютерах. Современный протокол SSD – NVME.
Storage – Система Хранения Данных (СХД) — это внешние хранилища данных, которые подключаются к серверам по оптоволокну или сетевому интерфейсу. Хранилища ставятся в те же серверные стойки, что и сервера и соединяются с ними. СХД – это ещё один огромный пласт информации, которого хватит на 10 статей. Специализированное оборудование для хранения данных. Их основное предназначение – это высокая отказоустойчивость, повышенная скорость обработки данных. Стоимости хранилищ данных начинаются от десятков тысяч долларов за продвинутые версии и это с минимальным набором дисков. Верхняя планка не ограничена, она может достигать и миллионов долларов и больше. Современные СХД могут иметь в названии слова типа AllFlash – что подразумевает отказ в них от HDD и внутренние алгоритмы и код оптимизированы только под SSD.
После поглощения EMC компания DELL упрочила своё положение на рынке хранилищ уровня предприятий. Huawei растёт на глазах и становится заметным игроком несмотря на санкции США. В России нет своих хранилищ данных мирового уровня, все значимые игроки рынка просто перемаркируют готовые изделия своей торговой маркой или собирают из частей известных производителей или вендоров свой вариант.
Intel Optane (3D Xpoint) – специфичный вид энергонезависимой памяти, самый быстрый на данный момент на случайное чтение, но на случайную запись нет такого явного преимущества, а в последовательном чтении и записи проигрывает топовым SSD. Не развился из-за высокой цены на накопители и отсутствия накопителей большого объёма. Так SSD+NVME обеспечивают лучшие показатели цена/качество. За цену Optane можно купить несколько SSD, которые в RAID будут давать большую скорость.
RAID – Нет смысла повторяться для чего нужны объединения дисков в массивы, для скорости и для отказоустойчивости. Прочитать можно здесь. Смотря какую задачу вы решаете, тот RAID и используется. Для OLTP БД чаще всего встречается RAID10.
Tape – ленточное хранение данных. Многие будут удивлены, но в 2020 году ленты ещё живы. Выходят новые версии картриджей с лентами, выпускаются огромные библиотеки хранения на сотни картриджей. Всё объясняется тем, что стоимость хранения на лентах продолжает быть самой низкой. Хранение плёнки не требует электричества, длительность хранения выше чем на дисках, но скорость доступа очень низкая и это последовательное чтение и запись. Есть подозрение, что в облаках самые холодные хранилища архивных данных могут использовать и ленты.
Возможности СУБД
Любые особенности СУБД – это конкурентные преимущества, которые играют роль при выборе для развёртывания её в своей инфраструктуре. Я не буду рассматривать всем понятные темы как безошибочность работы СУБД, поддержка разных наборов символов, сортировок для любой страны и т.д., как должно быть лучше очевидно. Также про стоимость было сказано выше. Разговор будет про важные и востребованные технологии и части СУБД. На самом деле их больше.
Горизонтальное масштабирование из коробки: Horizontal scaling vs Vertical Scaling.
Это то, что в немалой степени определило появление множества видов БД и СУБД в последние 10-15 лет. Если в начале 2000-x Oracle, Microsoft, IBM вели обратную агитацию и призывали объединять разрозненные данные из множества филиалов компаний в единый центр где стоит мощный сервер с данными и все работают удалённо с этими данными, включая появившиеся корпоративные сайты, Web API, мобильных клиентов, то уже в конце 2000-x при взрывном росте данных стало понятно, что вертикально масштабировать (покупать всё больший сервер) стоит уже слишком дорого или уже невозможно. Упирались в число CPU, дисков, сеть, соединений и т.д. для центральных узлов инфраструктуры. Поэтому появились решения, позволяющие распределять данные на множество серверов БД.
Большую роль в этом сыграли социальные сети и поисковые сайты, которые очень быстро набирали число пользователей, контент их рос в геометрической прогрессии, особенно после добавления файлов мультимедиа или видео. Также важно географическое распределение серверов, когда данные по клиентам хранят на серверах, которые ближе к нему географически и значит время отклика быстрее. Изначально распределение данных на множество небольших серверов делалось на уровне приложений, потом такие возможности стали включать в доделанные под себя движки СУБД, а дальше это стало трендом.
Не стоит думать, что горизонтальное масштабирование решит все ваши проблемы. Наоборот оно привнесёт усложнение всего и вся: кода, инфраструктуры, поиска ошибок и много чего ещё. А это тоже всё деньги. Но вам уже не понадобятся очень мощные и дорогие сервера, ваш проект сможет пережить большие нагрузки. Отдельные узлы хранящие данные часто называют шардами, а процесс распределения данных и запросов между узлами шардированием. Если правильно выбирать ключ шардирования, то запросы за данными идут только к той шарде где они есть. Брать на себя распределение запросов может как само приложение так и движок СУБД. Ниже на картинке пример, когда используется hash функция для шардирования, чтобы определить какой сервер использовать. И ещё у каждой шарды могут быть копии (реплики).
В данный момент, не так просто купить новые 8 процессорные сервера для пиковой производительности, их число очень ограничено они не нужны рынку, вытеснены 4 процессорными, которые дешевле и не в 2 раза, а больше. И если брать реальный пример, то 2 процессорный современный сервер по мощности вычислений сопоставим или превосходит 8 процессорный сервер 10 летней давности. Помимо процессоров ускорились все компоненты серверов: память, шина и т.д. Тот же самый запрос будет работать в 2-3 раза быстрее, если все данные в памяти. СУБД очень хорошо умеют использовать ядра и параллелить выполнение запросов.
У облачных провайдеров при росте числа ядер в виртуальном сервере в 2 раза цена растёт быстрее чем в 2 раза и имеет место ограничение на число ядер, потому, что провайдеру не выгодны виртуалки, которым нужно выдавать большую часть физического сервера, что с ним делать когда вы не нагружаете его, мощности простаивают.
Итог: для реально больших проектов вам понадобится горизонтальное масштабирование, если вы не доросли до такого, то лучше не усложняйте сервисы и БД разнесением на множество узлов, если только в СУБД это не поддерживается совершенно прозрачно для приложений. Проще проводить действия в оперативной памяти одного сервера чем тащить разрозненные куски данных с разных узлов и объединять их, чтобы получать результат.
Отказоустойчивость из коробки — High Availability. Master-master, master-slave.
High Availability– это термин когда ваш проект должен работать всегда. Любой простой в минуту грозит прямыми или косвенными убытками. В отказоустойчивых системах это достигается дублированием узлов. Так поступают в космической промышленности, предотвращая ситуацию, что выход из строя оборудования дорого обойдётся в космосе и так поступают и на земле с важной системой в продакшене. Дублируются важные узлы вашей инфраструктуры: сервера, хранилища данных, сетевые коммутаторы, каналы интернет и т.д.
Для БД дублируются сервера, которые запускают СУБД как программное обеспечение, дублируются данные, в самом простом случае это RAID массивы из дублирующих дисков. В специализированных СХД дублируются диски, блоки питания, процессоры, память, есть батарейка, которая даст возможность сохранить данные из кэша на диск.
Также для отказоустойчивости создаются online копии данных, которые позволяют содержать актуальную информацию. Данные синхронизируются в копию синхронно или асинхронно. Синхронно – это когда операция изменения подтверждается всеми узлами, что ведёт к задержкам в сохранении или асинхронно, когда данные сохраняются и потом распространяются в другое место отдельно.
Выглядит примерно так. Есть одна БД с данными, они расходятся на остальные сервера, возможно в удалённом дата-центре. Slave-копии могут использоваться для чтения, запросы за данными могут направляться на копии. Называется Master-Slave.
Но рано или поздно начнёт возникать ситуация, что ваша БД не успевает записывать из-за общей нагрузки. Хочется, чтобы данные могли записываться в другой копии менее загруженной, она была бы не только для чтения. Эта схема посложнее, так как нужно ещё разрешать конфликты если изменения одинаковых данных происходит на разных узлах в одно время, а если у вас master копии далеко, то вероятность конфликтов увеличивается. Это называется Master-Master. Плюс у master могут быть slave копии.
Дублирования данных на другие сервера могут быть как по всей БД, так и по отдельным таблицам.
Хорошо, когда ваша СУБД поддерживает такое распространение данных, на вас не ложится груз проблем как зафиксировав изменение данных в одном месте добиваться, чтобы данные появились в другом. А если сеть моргнула, а если копия не отвечает, и ещё много если на себя берёт движок. Если master становится недоступным, то происходит автоматическое перераспределение ролей, вчерашний slave становится master, а все остальные копии принимают от него данные. Приложение не замечает переключение, потому что работает через роутер, который также переключается. У вас сломался сервер с БД, а простоя нет, всё продолжает работать как ни в чём не бывало. Также можно проводить работы с экземпляром БД выключая его из работы, установить обновление СУБД и потом обратно ввести в работу.
Продвинутые хранилища СХД умеют копировать данные на другое хранилище в фоновом режиме на уровне дисков. У вас просто копия диска в другом месте. В ряде случаев можно использовать такие копии, но обычно они не доступны даже для чтения до момента прекращения синхронизации.
Online maintenance — online alter
24/7/365 – означает, что ваш проект работает всегда 24 часа, 7 дней в неделю и все 365 дней. У вас нет окна для работ по обслуживанию БД (maintenance). Значит все операции по созданию архивных копий, перестройки индексов, созданию таблиц, удалению колонок и много чего ещё, что должно проходить онлайн без заметной деградации производительности. То есть пока вы перестраиваете таблицу, например, удаляя колонку данных в реляционной БД, то таблица будет доступна, а будет создаваться копия, которая будет содержать все изменения пока идёт процесс перестройки. Не всегда есть возможность иметь много копий серверов с БД, для платных СУБД это ещё и деньги, чтобы проводить работы по очереди, поэтому возможность изменений структур без прерывания работы очень важно.
Мониторинг
Каждая интенсивно используемая и изменяемая БД рано или поздно сталкивается с вопросами производительности. Но как понять, что проблемы начались заранее не доводя до потери денег компаниями? Нужно мониторить состояние вашей СУБД. Если вы можете делать замеры текущего состояния, а ещё лучше смотреть статистику, которая собирает сама же СУБД, то вы из коробки можете решить множество проблем. В платных СУБД есть невероятно огромное количество метрик и статистик, есть сторонние компании, создающие инструменты мониторинга. Рынок очень конкурентный и в каждом инструменте есть свои особенности. Бесплатные СУБД в последние годы сильно улучшились в плане мониторинга и к ним тоже стали создавать мониторинги, только часто они уже не бесплатные.
Инструменты управления СУБД
Какая бы прекрасная СУБД у вас не была, но управление ей должно быть удобное. Конечно, всё можно делать из текстовых командных строк, поставляемых с СУБД, но многие вещи удобнее и интуитивнее делать из интерфейса, мало того вам не нужно помнить полный синтаксис команды наизусть и вы не ошибётесь. У удобного инструмента есть плагины от сторонних компаний, например, расширенные подсказчики для набора текста, они очень помогают и ускоряют написание кода, также вы можете щёлкать на всплывающих подсказках и смотреть исходный код для таблиц, процедур. Ещё очень важная функция – это выполнение запросов на множестве БД одновременно, у вас настроены коннекты сотен серверов и БД и вы можете распространить на них изменение очень быстро работая в одном окне. Ещё из интересного есть средства для помощи просмотра планов исполнения запросов на стороне сервера с подсказками какие индексы нужно построить, которые кардинально ускорят запрос.
Или для некоторых СУБД есть прекрасная возможность, востребованная у работающих с крупными данными, когда виден % исполнения запроса. Вы видите когда закончится запрос и выдаст результат.
Ещё из интересного: скриптование данных – это создание инструкций SQL, которые создадут копию данных на другом сервере, миграция данных, сравнение структур данных, сравнение данных, экспорт в другие форматы, системы контроля версий и обновления product-среды и т.д.
Есть инструменты, которые используются для управления разными типами БД, например, DataGrip от JetBrains (те самые которые причастны к Kotlin, ReSharper, GoLand и т.д.) очень мощный и настраиваемый. Картинка СУБД, с которыми он работает.
Расширение функционала СУБД на другом языке программирования
Какой бы мощной не была СУБД, но рано или поздно может не хватить встроенных функций. Например, какой-то новый вид хэширования или сжатия данных, который нужно поддержать на уровне БД. Если в языках программирования вы скачиваете нужную библиотеку, исходники и можете вставить вызов этого кода и не нужно придумывать велосипед, тратить ресурсы компании, то такой же подход можно реализовать и в СУБД. Вы можете расширить функционал СУБД из коробки своими подключаемыми модулями и они будут работать так же как просто как встроенные команды. Мало того, часто такие расширения могут работать быстрее чем встроенный код самой СУБД. Конечно, есть ряд ограничений, который накладывается на такого рода расширения, но сам факт наличия возможности писать код на распространённых языках программирования немаловажный плюс.
Логирование изменений
Важным вопросом бывает вопрос, а что было с данными или структурами БД на некий момент назад. Логирование изменений пригодится, когда вы поменяете структуры или данные, а понадобится вернуть обратно сами данные, либо структуры таблиц, индексы, либо код SQL в запросах. Вы будете знать, что на такой-то момент было так. Также это предохраняет от уничтожения данных, чаще всего непреднамеренного. В каждой СУБД название технологий разное, для примера Flashback Data Archive, Temporal history, Change Tracking, Data Audit и т.д.
Если ваша СУБД умеет, просто включать или выключать такое логирование, то это то что обязательно пригодится. Но чудес не бывает, поэтому если вы начинаете логировать, то привносите нагрузку, например, загружаются диски, растёт размер логов, они могут быть в БД или отдельно, если БД имеет копию, то сохранение в БД расходится по копиям.
Бизнес-логика в БД или нет
Как БД хранит свою структуру в самой себе, так и код запросов может храниться в БД. Планы запросов сохраняются при первом вызове, чтобы потом находить данные по этим планам. Вносить изменения в код языка БД проще, он компилируется на лету, то есть вы можете внести изменение через несколько десятков секунд после принятия решения об изменении, тогда как если вы соберётесь выложить обновление сервиса, то вам его нужно скомпилировать, добиться правильного обновления по всем инстансам этого сервиса. Это очень помогает в критических ситуациях, когда счёт идёт на секунды и вы просто одним изменением в БД можете прекратить поток нагрузки на другую инфраструктуру.
Бизнес-логика — это ряд правил, которые влияют на всю информационную структуру компании. Есть несколько подходов по хранению бизнес-логики. Например, на уровне приложений (сервисов, микро-сервисов) или если бизнес-логика в БД, то помимо хранения данных ещё и решает интеллектуально как возвращать данные, как накладывать фильтры, объединять данные из разных источников и т.д. Это даёт ряд преимуществ по гибкости и скорости изменений, но растёт нагрузка и в итоге упирается в производительность. Или, например, вы решили запретить редактировать данные прошлых годов, это правило легко реализуется на БД вместо того, чтобы отслеживать все возможные способы сделать это из сервисов, программ, сайтов и т.д. Чем больше способов управлять бизнес-логикой на БД тем лучше, вы будете иметь разные способы решить бизнес-задачу.
Если БД нагружена, то выносится бизнес-логика на уровень сервисов, кэшируются всеми способами результаты и т.д. БД используется только для быстрого получения данных.
Не все БД позволяют хранить код запросов в БД, например, в ClickHouse нет даже полноценного языка скриптов. Как организовывать хранение бизнес-логики компания решает самостоятельно, здесь нет универсальных правил.
Поддержка JSON
Самый скачиваемый NuGet-ом пакет в Micrsoft Visual Studio для языка C# — это библиотека для работы с JSON (JavaScript Object Notation). Этот пример показывает, что если нечто востребовано, то оно будет пробиваться везде где сможет даже у Microsoft, который исторически развивал XML. Хотя хранение в JSON противоречит правилам реляционных БД, но реальность такова, что слишком много данных в JSON в ИТ инфраструктуре и поддержку этого формата вставляют в СУБД разного типа.
In Memory
Оперативная память RAM быстрее любых жёстких дисков. Поэтому для максимального ускорения операций, в том числе с БД нужно по максимуму использовать память. Скажу сразу, что во всех СУБД память стараются использовать по полной и БД любого типа работает быстрее если много памяти на сервере. Часто запись на диск данных откладывается и не происходит непосредственно во время проведения операции записи. Есть много технологий и в разных СУБД они разные или могут называться по-разному, чтобы снизить число обращений к дискам.
Какие-то СУБД поддерживают возможность In-Memory как вариант работы, а некоторые объявляют эту возможность как главную, например, Tarantool.
Сжатие данных
Немаловажный параметр, который позволит экономить на размерах дисков и памяти серверов. Кроме этого сжатие ускоряет в разы операции чтения данных, сохранения копий данных и т.д. Например для OLAP хранилищ это значит более быстрое получение результатов запросов по огромной массе данных. Нужно понимать, что сжатие не бесплатно для ресурсов, но плюсов больше чем минусов, алгоритмы сжатия используются быстрые, которые не сильно нагружают CPU. Обычно сжатие задаётся на уровне СУБД и в работе программного обеспечения никак не сказывается, то есть ничего не нужно менять в коде.
Временные (temporary) объекты
Непростая логика получения данных может проходить несколько этапов, когда формируются отдельные наборы, которые участвуют дальше в последующей выборке. Не всегда нужно временные наборы сохранять в полноценные данные, они могут сохраняться в памяти пока существует коннект от клиента и не нужно думать об их высвобождении после отключения. Это могут быть переменные, таблицы, временные таблицы, которые видны другим коннектам. Временные объекты СУБД стараются держать в памяти так как их предназначение говорит, что ими быстро воспользуются и уничтожат, нет смысла фиксировать их изменения на диск.
MapReduce
Под этим устоявшимся термином от Google будем обозначать класс задач по распределённым вычислениям. Название идёт от двух шагов Map – распределяющего входные данные между распределёнными узлами и Reduce – получение результатов от распределённых узлов и формирование итогового результата. Представители Apache Hadoop и Spark – это целый набор библиотек, файловой распределённой системы HDFS и много чего ещё. Примером СУБД для работы с такими фреймворками является Hive, реляционная СУБД с поддержкой SQL. Тренды.
Стоит сказать, что в операционных БД эти технологии не используются. Используются в специализированных хранилищах данных, когда есть смысл раскидывать данные и проводить распределённые вычисления. Для большинства компаний без петабайт данных хватает обычных СУБД с их распределением вычислений между хостами, параллелизмом и т.д. По графикам и снижению рейтинга Hive можно сказать, что интерес к этим технологиям как минимум не растёт последние годы.
Работа с пространственными данными
Если необходимо находить объекты в реальном мире и чаще всего это задача нахождения ближайших объектов по отношению к некой точке в пространстве. Но как искать такие данные в реляционных данных? В принципе ничего не мешает делать свои собственные способы как искать в любом виде БД ближайшие точки, как подготавливать данные, чтобы поиск был быстрым. Разработчики СУБД тоже увидев спрос на такие поиски добавили технологии для пространственных индексов (spatial index) в виде сеток или часто можно встретить реализацию индексов с помощью R-tree дерева.
Graph data
Возможность работы с иерархическими или графовыми данными. Выше было описание и примеры для чего часто используется представления в виде графов.
Безопасность
Обычно БД находятся внутри защищённого контура сети. И напрямую никто не открывает порты наружу. Если вы всё же каким-то образом открыли доступ до сервера, то не сомневайтесь, что сначала будут прощупывать порты, нет ли там БД известного типа и потом пытаться сломать. Информация имеет ценность, поэтому открыть доступ к серверам БД наружу это как выставить сейф с деньгами в окно — странный вариант.
В самих БД есть ряд технологий, которые позволяют снизить риск доступа к данным. Это шифрование бэкапов, когда даже украв диск с копиями БД без пароля с ним ничего нельзя сделать. Файлы работающей БД вы скорее всего не сможете просто прочитать, СУБД получает к ним эксклюзивный доступ. В каждой СУБД есть разграничение прав пользователей, группы в которые включаются пользователи, права на разные операции на сервере СУБД включая чтение данных, запись, изменение структур, настроек и т.д. Огромное число видов доступа под любые задачи из реальной жизни. Доступы можно раздавать, отнимать, явно запрещать доступ к неким ресурсам. Вопросы безопасности — это огромный и очень интересный пласт информации не для этой статьи. Не забывайте ставить обновления, так как уязвимости находятся и закрываются производителями СУБД. Проводите сторонний аудит безопасности ИТ инфраструктуры проверенными компаниями. Вы будете неприятно удивлены когда до ваших данных доберутся аудиторы безопасности (пентестеры), правда чаще это будет не из-за проблем безопасности самой СУБД или вашей БД.
Использование GPU, NPU (Neural Processing Unit), Google TPU (Tensor Processing Unit)
На современном этапе развития БД каких-то массовых использований графических и специализированных процессоров в движках СУБД не наблюдается. Да, GPU и NPU используются для математических расчётов, обучения нейронных сетей, но размер оперативной памяти GPU и NPU меньше чем у обычных серверов, а задача выборки или обновления данных (наиболее частые в БД) не требуют огромной вычислительной мощности. Данные из БД можно подавать на вход специализированных фреймворков работающих с нейронными сетями для дальнейших итераций. DPU (Data Processing Unit) – это класс процессоров не имеющего стандартов, обычно интегрированных в сетевые карты. Их будущее ещё под вопросом.
Community
Большое сообщество единомышленников, использующих то же ПО обеспечит вам ответы на вопросы, которые могут быть не так тривиальны. Первое, что стоит смотреть при непонятной ошибке – это аналогичные вопросы с тем же текстом ошибки или описанием ситуации. Для разных СУБД есть множество сайтов с авторитетными авторами. Тем не менее приведу статистику с StackOverflow.com сколько вопросов есть по топовым БД, на каждый может быть несколько ответов. Наверняка Ваш вопрос будет уже с решением если сообщество большое. Такая вот накопленная KnowledgeBase.
Tag | Count |
MySQL | 598,350 |
SQL Server | 285,092 |
Mongodb | 129,907 |
Oracle | 122,385 |
Postgresql | 117,427 |
sqlite | 82,596 |
ms-access | 46,177 |
elasticsearch | 44,482 |
redis | 18,290 |
db2 | 10,485 |
… |
|
clickhouse | 530 |
tarantool | 103 |
Для общей картины, изображение связей БД, фреймворков, языков программирования, платформ взятых . Не смотрим % использования — это всегда причина для холиваров (holy war — священная война). Здесь больше интересны связи, что с чем чаще входит в связь. Красным отмечены СУБД. Куда делись Oracle и IBM DB2 – это загадка на совести составителей диаграммы.
Подведём итоги: Все СУБД из топа завоевали это место в процессе естественного отбора и имеют свой кусок рынка. OpenSource побеждает Commercial СУБД, в России процесс ускорился в этом направлении. СУБД Online проектов растут в количестве отнимая долю в выручке у оффлайн бизнеса. Реляционные БД в ближайшее время не сдадут позиции и будут преобладать. Для управления БД будет доминировать язык SQL. Для хранения данных операционных БД используется флеш-память. Чем больше возможностей и особенностей у СУБД и большее число людей использует, то тем проще её интегрировать в инфраструктуру и поддерживать. Переход в облака БД идёт фрагментарно, в ближайшие годы большая часть данных будет храниться локально. Российские технологии по БД в мировом масштабе не особо заметны, но есть такие и пожелаем им успеха.
Особенности выбора современных СУБД | Открытые системы. СУБД
На протяжении долгого времени доминировали реляционные СУБД. Сам по себе реляционный подход оказался простым и удобным, что обеспечило его распространение среди разработчиков, а производители смогли выпустить зрелые продукты, пригодные для широкого использования: Oracle Database Server, IBM DB2, Microsoft SQL Server, Teradata, PostgreSQL, MySQL и MariaDB. Возможности реляционных СУБД полностью соответствовали требованиям приложений того времени, однако появление информационных хранилищ и многомерного анализа данных разделило прикладные информационные системы на OLTP и OLAP, а для нужд последних появились специализированные СУБД, хотя и соответствующие идеологии реляционного подхода, но на уровне реализации имеющие существенные отличия: секционирование, поколоночное хранение, сжатие данных и т. д. Дальнейшее развитие технологий баз данных было стимулировано появлением принципиально новых прикладных задач, связанных с высоконагруженными системами, Большими Данными, потоковой аналитикой, социальными сетями и проч. Каждый новый класс задач требовал принципиально новых СУБД, и реляционные системы оказались неприменимы — излишняя функциональность и универсальность привели к слишком академичной архитектуре, плохо адаптируемой под требования конкретных приложений [1]. В новых СУБД уже на уровне архитектуры не было универсальности реляционного подхода SQL, богатого функционала, обязательной поддержки ACID и др. К сегодняшнему дню появилось большое количество различных систем класса NoSQL [2], способных решать самые разнообразные задачи, но и реляционные системы впитали в себя идеи NoSQL, породив системы NewSQL [3], сочетающие в себе достоинства реляционного и нереляционного подходов.
Можно ли назвать это ренессансом? С одной стороны, после долгого затишья наблюдается бурное развитие технологий баз данных и появляется большое количество новых систем. Текущий момент можно сравнивать с «дореляционным» рынком, когда существовало множество самых разнообразных парадигм, в частности иерархические и сетевые СУБД, а большое количество новых СУБД объясняется изначальной неэффективностью реляционных систем в конкретных случаях.
Если проводить параллели между этапами развития СУБД и историческими эпохами, то реляционные СУБД вполне соответствуют средневековью, когда доминировала одна идея. В этом есть свои плюсы и минусы. С одной стороны, главенство реляционных СУБД позволило обкатать и получить зрелые реализации, адаптированные для практического применения. С другой стороны, оно препятствовало в то время развитию альтернативных подходов — предполагалось, что существует сравнительно строгая классификация СУБД, а нужная система может быть выбрана на основе четких критериев. Сегодня технологии СУБД вступили в эпоху ренессанса, взявшую однако по инерции тезис из средневековья: выбор СУБД может быть логически обоснован и доказан, а разработчик приложения почти всегда может выбрать подходящую ему систему, и главной проблемой будет лишь незрелость многих систем класса NoSQL. Однако на практике все оказалось сложнее.
Выбор СУБД как процесс
При всей своей элегантности идея рационального выбора СУБД под конкретную прикладную задачу обречена на провал — невозможно выработать единые общеприменимые критерии, и причин здесь несколько. Во-первых, при выборе необходимо сравнивать связанные, но не сопоставимые параметры. Во-вторых, количество оцениваемых параметров может оказаться слишком велико. Наконец, сами по себе параметры сравнения часто выглядят слишком расплывчато.
Пример сравнения связанных, но не сопоставимых критериев — оценка скорости работы двух СУБД. На первый взгляд, все просто: на различных нагрузках выполняется тестовый прогон, а затем на основе полученных результатов принимается окончательное решение [4]. Но как быть, если при одной нагрузке выигрывает одна система, а при другой — другая. Выбор осложняется, когда одна из систем работает медленнее, но зато лучше масштабируется, требуя меньше ресурсов.
Еще большие сложности начинаются при сопоставлении функционала. Разумеется, все сравниваемые варианты должны полностью удовлетворять текущим требованиям приложения, но при этом как оценивать «довесок» неиспользуемых возможностей? Обычно он у каждой системы свой, и может оказаться, что на данный момент он не нужен, но впоследствии повлияет на развитие всего приложения. Соответственно, нужно выбирать СУБД исходя не только из текущих потребностей, но и из перспектив развития приложения.
СУБД следует рассматривать не только как составную часть прикладной системы, но и как инструмент разработчика, и тут появляются такие критерии сравнения, как простота, удобство, понятность, предсказуемость и т. д., которые, однако, нельзя однозначно оценить формально. Единственное, что можно добавить, — это связь удобства использования системы и ее распространенности. Как правило, в Интернете присутствует масса материалов по широко распространенным СУБД, что облегчает работу программистов при решении каких-либо проблем. Однако продукты Open Source — это не универсальная панацея, поскольку наличие исходного кода само по себе не гарантирует ни удобства использования, ни предсказуемости поведения системы. Еще один довод в пользу Open Source — наличие сообщества, но ни одно сообщество не дает стопроцентной гарантии оперативной технической поддержки, особенно в случаях критически важных приложений (управление производством, банковский сектор и т. п.).
Каждый из упомянутых критериев сравнения может быть подвергнут критике, и разработчики прикладных систем часто выбирают СУБД исходя из собственных субъективных предпочтений и в конечном счете действуют иррационально — «нравится — не нравится». Все остальные критерии, в том числе результаты тестирования и пробной эксплуатации, используются как вспомогательные доводы. С одной стороны, такая ситуация не нормальна — разработка ПО все больше становится строгим процессом, каждый шаг которого четко регламентирован и обоснован. Заказчик прикладной системы платит деньги и потому имеет право получить разумные обоснования каждого принятого технического решения. С другой стороны, разработчик прикладной системы отвечает за конечный результат и должен иметь возможность принимать интуитивные решения, которые может подкрепить только собственным опытом и ощущениями.
СУБД как часть проекта
Если задача выбора универсальной СУБД не имеет однозначного решения, то радикальным выходом может быть создание системы, специально предназначенной для конкретного приложения. Если несколько лет назад подобное решение казалось абсурдным, то теперь оно становится все более распространенным явлением (см. табл. 1).
Таблица 1. Примеры СУБД, созданных как результат прикладных проектов |
Трудно предложить однозначные критерии в пользу принятия решения о необходимости создания новой специализированной СУБД под нужды конкретного проекта, тем не менее можно привести аргументы «за» и «против» (см. табл. 2).
Таблица 2. Создавать или нет новую СУБД? |
Немаловажное влияние на решение о необходимости и целесообразности разработки новой СУБД оказывают такие субъективные факторы, как доверие между заказчиками приложения и разработчиками, предлагающими создать новую СУБД.
Попытки создать систему без привязки к конкретной прикладной задаче или их классу практически обречены на провал — в условиях сильной сегментации технологий СУБД очень сложно сформулировать требования к будущей системе. Если они полностью совпадут с некоторым сегментом, то новая СУБД будет вынуждена конкурировать с уже существующими решениями, имеющими большую известность, востребованность, документированность, надежность. Все это говорит в пользу уже существующих систем, даже если по техническим характеристикам они будут проигрывать новой, а если требованиям к новой СУБД уже отвечают несколько готовых систем, то вряд ли создаваемая система получит широкое распространение.
Некоторые современные СУБД (например, Vertica и VoltDB) стали результатом исследовательских проектов, в рамках которых был создан прототип будущей системы (C-Store — прототип Vertica, H-Store — прототип VoltDB), проверенный затем на реальных практических задачах. Однако для массового создания новых СУБД такой путь невозможен: далеко не каждая компания готова финансировать подобные исследовательские проекты.
Иррациональный мир современных СУБД
Технологии баз данных вступают в иррациональную эпоху, когда любое важное решение в конечном счете основывается на субъективизме и всегда может быть подвергнуто сомнению. Единственный однозначный критерий — экономическая выгода.
Критике сегодня подвергается и сама идея СУБД как отдельного инструмента. Многообразие новых задач обработки данных привело к созданию огромного количества различных продуктов, предназначенных для решения принципиально разных, несопоставимых друг с другом задач. В этой ситуации возникает вопрос: какие из продуктов являются СУБД, а какие нет?
В реляционную эпоху ответ на этот вопрос был однозначным и основывался на 12 правилах Кодда, но современные СУБД не обязаны использовать реляционную модель, поддерживать пустые значения, предоставлять возможности для работы со словарем базы данных, обеспечивать физическую независимость данных и т. д. Каждое из сформулированных Коддом правил может быть оспорено, а других общепризнанных определений СУБД сегодня нет.
Однако научно-техническое сообщество не спешит расставаться с термином «СУБД». Статус разработчика СУБД весьма престижен, поэтому создатели любого более или менее универсального решения в области обработки данных спешат к названию своего продукта приписать формулировку «СУБД» или «платформа». С экономической точки зрения статус разработчика СУБД позволяет компаниям позиционироваться на конкретном рынке и развиваться сразу по двум направлениям: поставка собственной СУБД, оказание сопутствующих услуг по технической поддержке, а также реализация прикладных систем на ее основе; разработка специализированных решений или доработка имеющегося продукта под запросы конкретного приложения.
Оба направления дополняют друг друга. С одной стороны, наличие собственного продукта позволяет заявлять о высокой компетенции в области СУБД. С другой, выполнение заказных работ дает возможность создавать специализированные решения, повышать свою квалификацию и впоследствии развивать продукт на основе полученного опыта.
Там, где бессильны универсальные СУБД
Примеры приложений, для которых требуется разработка специализированных СУБД:
- средства контроля видеопотока и автоматического мониторинга рекламных роликов;
- системы легковесной аналитики, выполняющие аналитические задачи без задействования дорогостоящих аппаратных решений;
- распределенные банки знаний из сложных предметных областей;
- системы индексации и поиска геопространственных данных.
Изменения в технологиях баз данных приводят к смене бизнес-моделей, которыми руководствуются разработчики СУБД. Нишевые узкоспециализированные системы становятся востребованы все чаще, и разработчиком СУБД становится уже не тот, у кого есть готовый к использованию продукт, а тот, кто способен создать новую специализированную систему с нуля. Пока это не сильно влияет на общепризнанных лидеров, предлагающих универсальные СУБД для решения широкого круга задач, и еще достаточно долго лидеры будут сохранять свои позиции, интенсивно впитывая инновационные технологии. Вместе с тем новые технологии будут прерогативой сравнительно небольших компаний, продвигающих свои специализированные решения либо работающих по бизнес-модели «разработка СУБД под заказ».
***
Изменения в области технологий баз данных и большое число нишевых решений привели к трансформации ландшафта СУБД — на рынке сегодня востребованы разработчики, способные создавать специализированные системы с нуля, что свело на нет важность объективных критериев выбора системы управления базами данных. С другой стороны, развитие технологий СУБД происходит не только под влиянием создаваемых пользовательских приложений — многие революционные технологии появлялись исключительно в рамках исследовательских или рискованных коммерческих проектов, и здесь востребованы объективные критерии выбора.
Литература
- M. Stonebraker. «One Size Fits All»: An Idea Whose Time Has Come and Gone. URL: http://dl.acm.org/citation.cfm?id=1054024 (дата обращения: 18.09.2017).
- Венкат Гудивада, Дана Рао, Виджай Рагхаван. Ренессанс СУБД: проблема выбора // Открытые системы.СУБД. — 2016. — №3. — С. 12–17. URL: https://www.osp.ru/os/2016/03/13050249 (дата обращения: 18.09.2017).
- M. Stonebraker. New SQL: An Alternative to NoSQL and Old SQL for New OLTP Apps. URL: https://cacm.acm.org/blogs/blog-cacm/109710-new-sql-an-alternative-to-nosql-and-old-sql-for-new-oltp-apps/fulltext (дата обращения: 18.09.2017).
- Андрей Николаенко. Эталонные тесты СУБД: что было, что стало, что будет // Открытые системы.СУБД. — 2017. — №2. — С. 35–39. URL: https://www.osp.ru/os/2017/02/13052225 (дата обращения: 10.09.2017).
Константин Селезнев ([email protected]) — ведущий инженер-программист, группа компаний «РЕЛЭКС» (Воронеж).
Тестирование,NoSQL,Реляционные СУБД,Relational DBMS,benchmark
Поделитесь материалом с коллегами и друзьями
Обзор современных реляционных СУБД
Среди современных систем управления базами данных выделяют реляционные СУБД, к которым относятся:
- MS Access,
- Visual FoxPro,
- MySQL,
- PostgreSQL,
- Sybase,
- SQL Server,
- Oracle,
- DB2
- и др.
Рассмотрим наиболее распространенные из них.
СУБД MS Access
Программа Access функционирует под управлением операционной системы Windows и обладает стандартизованным интерфейсом приложений Windows.
Основным компонентом является база данных, которая может содержать таблицы, отчеты, запросы, формы, модули и макросы.
Обработка информации в процессе работы с БД осуществляется с помощью макросов или VBA программ.
Открытая БД может обмениваться данными с внешними БД. Внешней базой данных может быть любая БД, которая поддерживает протокол ODBC и расположена на удаленном сервере, или одна из БД СУБД Access, dBASE или Paradox.
Access позволяет создавать и выполнять запросы на выборку, добавление данных, удаление и обновление.
Запрос можно создать с помощью QBE или SQL. Программой Access поддерживается механизм OLE (связывание и встраивание объектов) и механизм DDE (динамический обмен данными).
СУБД Visual FoxPro
СУБД Visual FoxPro содержит развитые средствами создания баз данных, организации запросов к ним, создания приложений с при помощи визуального, объектно-ориентированного программирования. СУБД Visual FoxPro работает под управлением Windows.
База данных в Visual FoxPro является совокупностью связанных таблиц. В базе данных определены условия ее целостности через первичные и внешние ключи таблиц. Все изменения, которые происходят в БД, обнаруживаются и централизованно обрабатываются с помощью триггеров и встроенных процедур программы.
Visual FoxPro характеризует высокая скорость обслуживания БД.
С помощью стандарта ODBC и SQL-запросов для выборки данных Visual FoxPro может работать с базами данных dBase, Paradox, Access и т. д., с серверами баз данных – Oracle MS SQL Server и др.
Возможна одновременная работа приложения Visual FoxPro с собственными и сетевыми таблицами, которые расположены на других компьютерах в локальной сети.
Visual FoxPro поддерживает механизмы OLE и DDE работы с Windows приложениями.
Visual FoxPro позволяет создавать сетевые приложения, которые функционируют в сетях под управлением MS LAN Manager, MS Windows и др.
MS SQL Server
Microsoft SQL Server широко используется в области БД и для анализа данных, позволяет быстро создавать масштабируемые решения электронной коммерции, приложений для бизнеса и хранилищ данных. SQL Server поддерживает язык XML и протокол HTTP, средства повышения доступности и быстродействия, которые позволяют обеспечить бесперебойную работу и распределить нагрузку, функции улучшения настройки и управления.
Платформа анализа данных SQL Server, которая интегрирована с MS Office, позволяет открыть доступ к необходимой бизнес-информации с помощью интерфейса MS Word и MS Excel.
В SQL Server входит развитая, удобная и функциональная среда программирования, которая включает средства для работы с веб-службами, технологии доступа к данным.
Oracle
Oracle включает СУБД и средства разработки и анализа данных.
Oracle включает БД, интеграционную платформу, сервер приложений, инструменты управления неструктурированными данными и аналитики.
СУБД Oracle Database позволяет автоматизировать задачи администрирования, обеспечивает безопасность и соответствие нормативно-правовым актам защиты информации, содержит функции управления и самодиагностики. К характеристикам системы относится управление большими объемами данных с помощью использования компрессии и распределенных таблиц, эффективная защита данных, возможность интеграции геофизических данных и полного восстановления и т.д.
ПМ-ПУ :: Современные СУБД
Составители: кандидат физ.-мат. наук, доцент Сергеев С.Л.старший преподаватель Стученков А. Б.
Содержание дисциплины
- 1. Архитектура баз данных.
- Логическая архитектура баз данных.
- Системный каталог БД (словарь данных, системные таблицы). Схемы, связь между схе-мой и владельцем. Таблицы, таблицы системного каталога. Представления. Индексы. Ог-раничения целостности. Кластеры данных (Oracle): индексированные кластеры данных, хэш-кластеры. Хранимые процедуры. Стандартные (SQL) и расширяемые процедуры. Функции. Типы функций: скалярные, агрегатные (функции столбца), табличные. Тригге-ры. Триггеры как средство обеспечения целостности. Определяемые пользователем типы данных (Distinct Types). Системные типы. Примитивные и структурированные типы.
- Объектный подход (Oracle).
- Объектные типы.
- Объектные таблицы.
- Объектные представления.
- Физическая архитектура баз данных.
- Группы разделов (DB2). Табличные пространства (группы файлов). Контейнеры. Страни-цы. Экстенты. Оптимизация размеров страниц и экстентов (Oracle, DB2). Файлы журнала транзакций.
- 2. Производительность.
- Экземпляр базы данных (DB2, Oracle).
- Назначение и принцип работы экземпляра. Фоновые процессы.
- Буферный пул (буферный кэш).
- «Чистые» и «грязные» страницы. Запись страниц буферного пула на диск. Агенты очистки страниц.
- Оптимизатор запросов.
- План запроса. Automatic summary tables (AST). ценка стоимости запросов. Возможность преобразования запроса к эквивалентной, но более эффективной форме.
- Параллелизм.
- Обзор архитектуры аппаратных сред, поддерживающих параллелизм: многопроцессорные машины, кластеры. Типы параллелизма: параллелизм ввода/вывода, внешний параллелизм, внутренний па-раллелизм (внутрираздельный и межраздельный параллелизм). Пути достижения параллелизма: использование нескольких контейнеров в табличном пространстве (параллелизм ввода/вывода), увеличение числа процессоров, либо узлов в кластере, разделение БД.
- 3. Система безопасности.
- Аутентификация пользователя. Права, полномочия (authority), привилегии (privilege). Принцип наименьших привилегий. Пользователи и группы (роли). Предоставление и отзыв привилегий. Команды GRANT и REVOKE.
- 4. Резервное копирование и восстановление данных.
- Типы резервных копий. Рекомендации по совместному применению типов резервных копий. Резервное копирование отдельных табличных областей (файлов). Резервное копирование и восстановление распределенных БД (параллелизм).
- Часть 5. Мониторинг и оптимизация.
- Цель мониторинга. Оптимизация работы системы. Краткий обзор объектов и средств мониторинга для каждой СУБД. Возможность записи данных мониторинга в таблицы БД. Анализ SQL-запросов.
Литература
- Артемов Д. Microsoft SQL Server 2000. Новейшие технологии. М.: Русская Редакция, 2001.
- Мамаев Е.В. Microsoft SQL Server 2000. — СПб.: БХВ-Петербург, 2001.
- Тихомиров Ю. В. MS SQL Server 2000: разработка приложений. . — СПб.: БХВ-Петербург, 2000.
- D. Chamberlin M. Kaufmann A Complete Guide to DB2 Universal Database, 1998.
- G. Baklarz, B. Wong DB2 Universal Database v7.1 for UNIX, Linux, Windows and OS/2 Data-base Administration Certification Guide. Prentice Hall, October 30, 2000.
- M. Theriault, R. Carmichael, J. Viscusi. Oracle DBA 101. Oracle Press, 1999.
- M.Frohock Garcia, J.Reding, E. Whalen, S. Adrien DeLuca. Microsoft SQL Server 2000 Administrator’s Companion, 2000.
- S. Bobrowski Oracle 8. Architecture. Osborne/McGraw-Hill, 1998.
- T. Connolly, C. Begg, Database Systems: A Practical Approach to Design, Implementation, and Management. Pearson Addison Wesley, 2001.
Access, ms sql Server, sqLite.
Microsoft Access — реляционная СУБДкорпорации Microsoft. Имеет широкий спектр функций, включая связанные запросы, связь с внешними таблицами и базами данных. Благодаря встроенному языку VBA, в самом Access можно писать приложения, работающие с базами данных.
Microsoft Access на сегодняшний день является одним из самых распространенных настольных приложений для работы с базами данных.
Основные компоненты MS Access:
построитель таблиц;
построитель экранных форм;
построитель запросов
построитель отчётов, выводимых на печать.
Microsoft SQL Server — система управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Основной используемый язык запросов — Transact-SQL. Transact-SQL является реализацией стандарта ANSI/ISO по структурированному языку запросов (SQL) с расширениями. Используется для работы с базами данных размером от персональных до крупных баз данных масштаба предприятия; конкурирует с другими СУБД в этом сегменте рынка.
Microsoft SQL Server Express является бесплатно распространяемой версией MS SQL Server, развитием системы MSDE. Данная версия имеет некоторые технические ограничения. Такие ограничения делают её непригодной для развертывания больших баз данных, но она вполне годится для ведения программных комплексов в масштабах небольшой компании. Содержит полноценную поддержку новых типов данных, в том числе XML-спецификации.
SQLite — легковесная встраиваемая реляционная база данных.
Слово «встраиваемый» означает, что SQLite не использует парадигму клиент-сервер, то есть движок SQLite не является отдельно работающим процессом, с которым взаимодействует программа, а предоставляет библиотеку, с которой программа компонуется и движок становится составной частью программы. Таким образом, в качестве протокола обмена используются вызовы функций (API) библиотеки SQLite. Такой подход уменьшает накладные расходы, время отклика и упрощает программу. SQLite хранит всю базу данных (включая определения, таблицы, индексы и данные) в единственном стандартном файле на том компьютере, на котором исполняется программа.
Благодаря архитектуре движка возможно использовать SQLite как на встраиваемых системах, так и на выделенных машинах с гигабайтными массивами данных.
38. Современные субд: PostgreSql, MySql, Cashe.
PostgreSQL — свободная объектно-реляционная система управления базами данных (СУБД).
Сильными сторонами PostgreSQL считаются:
поддержка БД практически неограниченного размера;
мощные и надёжные механизмы транзакций и репликации;
расширяемая система встроенных языков программирования:
наследование;
легкая расширяемость.
PostgreSQL поддерживает большой набор встроенных типов данных:
Основные возможности: функции, триггеры, механизм правил, индексы, наследование, пользовательский объекты и др.
MySQL — свободная система управления базами данных (СУБД). MySQL является решением для малых и средних приложений. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы. Гибкость СУБД MySQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типа MyISAM, поддерживающие полнотекстовый поиск, так и таблицы InnoDB, поддерживающие транзакции на уровне отдельных записей. Более того, СУБД MySQL поставляется со специальным типом таблиц EXAMPLE, демонстрирующим принципы создания новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в СУБД MySQL постоянно появляются новые типы таблиц.
Caché (Кашэ) — кроссплатформенная промышленная СУБД, интегрированная с технологией разработки веб-приложений. Cashe является постреляционной СУБД.
Данные в Cache’ хранятся под управлением Многомерного сервера данных. В основе Cache’ лежит транзакционная многомерная модель данных (TMDM), которая позволяет хранить и представлять данные так, как они чаще всего используются. Многомерный сервер данных снимает многие ограничения, накладываемые реляционными СУБД, которые хранят данные в двумерных таблицах, ведь если реляционная модель состоит из большого количества таблиц, что необходимо при работе со сложными структурами данных, это существенно усложняет и замедляет выполнение сложных транзакций и ведет к хранению излишней информации. Cache’ хранит данные в виде многомерных разреженных массивов – глобалей. Уникальная транзакционная многомерная модель данных позволяет избежать проблем, присущих реляционным СУБД, оптимизируя данные на уровне хранения.
Cache’ предназначена для обработки транзакций в системах с большими и сверхбольшими БД (сотни гигабайт, терабайты) и большим количеством одновременно работающих пользователей. Многомерный сервер данных Cache’ позволяет разработчикам получить великолепную производительность, отказавшись от хранения избыточных данных и таблиц. Реляционная модель не всегда подходит для описания сложных предметных областей. Транзакционная модель данных Cache’ позволяет оптимизировать данные на уровне хранения, поддерживать объектную модель и сложные типы данных. Все эти возможности значительно упрощают создание сложных систем.
36. QBE – язык запросов к БД.
Для подготовки запросов с помощью различных СУБД чаще всего используются два основных языка описания запросов:
QBE (Query By Example) — язык запросов по образцу; SQL (Structured Query Language) — структурированный язык запросов.
Язык QBE позволяет задавать сложные запросы к БД путем заполнения предлагаемой СУБД запросной формы (иногда также используют термин QBF – запрос по форме). Такой способ задания запросов обеспечивает высокую наглядность и не требует указания алгоритма выполнения операции — достаточно описать образец ожидаемого результата. В каждой из современных реляционных СУБД имеется свой вариант языка QBE.
С помощью запросов на языке QBE можно выполнять следующие основные oперации:
Выборку данных
Вычисление над данными
Вставка новых записей
Удаление записей
Модификацию (изменение) данных
Выборка, вставка, удаление и модификация могут производиться безусловно или в соответствии с условиями, задаваемыми с помощью логических выражений. Вычисления над данными задаются с помощью арифметических выражений и порождают в ответных таблицах новые поля, называемые вычисляемыми.
Запросная форма обычно имеет вид таблицы, имя и названия полей которой совпадают с именем и названиями полей соответствующей исходной таблицы. Чтобы узнать имена доступных таблиц БД, в языке QBE предусмотрен запрос на выборку имен таблиц. Названия полей исходной таблицы могут вводиться в шаблон вручную или автоматически. Во втором случае используется запрос на выборку заголовков столбцов.
В современных СУБД, например, в Access и Visual FoxPro, многие действия по подготовке запросов с помощью языка QBE выполняются визуально с помощью мыши. В частности, визуальное связывание таблиц при подготовке запроса выполняется не элементами примеров, а просто «протаскиванием» мышью поля одной таблицы к полю другой.
Основные направления развития QBE а) повышение наглядности и удобства; б) появление средств, соответствующих новым возможностям СУБД, например, формулировка неточных или нечетких запросов, манипулирование большими объемами данных; в) в более отдаленной перспективе использование речевого ввода запросов.
33. Восстановление баз данных
Восстановление базы данных — это функция СУБД, которая в случае логических и физических сбоев приводит базу данных в актуальное состояние.
В случае логического отказа или сигнала отката одной транзакции журнал изменений сканируется в обратном направлении, и все записи отменяемой транзакции извлекаются из журнала вплоть до отметки начала транзакции. Согласно извлеченной информации выполняются действия, отменяющие действия транзакции. Этот процесс называется откат (rollback).
В случае физического отказа, если ни журнал изменений, ни сама база данных не повреждены, то выполняется процесс прогонки (rollforward). Журнал сканируется в прямом направлении, начиная от предыдущей контрольной точки. Все записи извлекаются из журнала вплоть до конца журнала. Извлеченная из журнала информация вносится в блоки данных внешней памяти, у которых отметка номера изменений меньше, чем записанная в журнале. Если в процессе прогонки снова возникает сбой, то сканирование журнала вновь начнется сначала, но восстановление фактически продолжиться с той точки, где оно прервалось.
В случае физического отказа, если журнал изменений доступен, но сама база данных повреждена, то должен быть выполнен процесс восстановления базы из резервной копии. После восстановления база будет находиться в состоянии на момент выполнения резервной копии. Для восстановления базы данных на момент отказа необходимо выполнить прогонку всех изменений, используя журнал изменений.
В случае физического отказа, если журнал изменений недоступен, но сама база данных не повреждена, восстановление возможно только на момент предыдущей контрольной точки.
В случае физического отказа, если повреждены как журнал изменений, так и сама база данных, то восстановление возможно только на момент выполнения резервной копии.
Обзор современных систем управления базами данных Текст научной статьи по специальности «Компьютерные и информационные науки»
ЭЛЕКТРОННЫЙ НАУЧНЫЙ ЖУРНАЛ «APRЮRI. CЕРИЯ: ЕСТЕСТВЕННЫЕ И ТЕХНИЧЕСКИЕ НАУКИ»
УДК 681.3.01:004.2
№ 1 2016
ОБЗОР СОВРЕМЕННЫХ СИСТЕМ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ
Толстых Никита Денисович
студент
Учватов Сергей Андреевич
студент
Мордовский государственный университет им. Н.П. Огарёва, Саранск
Аннотация. В статье выполнен обзор современных систем управления базами данных. Описаны различия между базами данных и системами управления базами данных. Представлены ключевые особенности использования систем управления базами данных Miсrоsоft Aœess, MS SQL, MS SQL Server.
Ключевые слова: база данных, система управления базами данных, Miсrоsоft Aœess, MS SQL, MS SQL Server.
REVIEW OF MODERN DATABASE MANAGEMENT SYSTEMS
Tolstykh Nikita Denisovich
student
Uchvatov Sergey Andreevich
student
Ogarev Mordovia State University, Saransk
Abstact. In article the review of modern database management systems is executed. Distinctions between databases and database management systems are described. Key features of use of the database management systems Microsoft Access, MS SQL, MS SQL Server are presented.
Key words: database, database management system, Microsoft Access, MS SQL, MS SQL Server.
Современные условия предполагают обработку огромного количества информации, которая присутствует во всех сферах жизнедеятельности человека. Эффективна обработка информации обеспечивает конкурентные преимущества. Системы управления базами данных являются уникальным инструментом в процессе организации обработки информации.
Изучением вопросов использования и функционирования современных систем управления базами данных занимались А.А. Абакумов, В.Л. Акимов, А.И. Егунова, К.А. Лещанкин, В.М. Таланов; вопросами использования баз данных в информационных системах занимались В.М. Таланов, С.А. Федосин. В тоже время, можно отметить не полное раскрытие данной темы в работах обозначенных авторов, в связи с тем, что использование систем управления базами данных очень широко и требует дополнительного анализа и обобщения имеющихся сведений.
Цель работы — обзор современных систем управления базами данных.
Многие специалисты указывают на распространённую ошибку, которая состоит в некорректном использовании термина «база данных» вместо термина «система управления базами данных», и указывают на необходимость различения этих понятий.
База данных представляет собой представленную в объективной форме совокупность самостоятельных материалов (расчётов, статей, нормативных актов, судебных решений и иных подобных материалов), которые систематизированы таким образом, чтобы данные материалы могли быть найдены и обработаны при помощи компьютерной техники.
В отличии от базы данных система управления базами данных позволяет организовать эффективный доступ к этим данным и их обработки. Среди многочисленных систем управления базами данных можно выделить: Microsoft Access; MS SQL, MS SQL Server.
Microsoft Access представляет собой реляционную систему управления базами данных от корпорации корпорации Microsoft имеющую широкий спектр функций, включая связанные запросы, связь с внешними таблицами и базами данных. Средствами встроенного языка VBA можно создавать приложения по работе с базами данных.
В работе следующих авторов (А.А. Аббакумов, В.Л. Акимов, А.И. Егунова, К.А. Лещанкин, В.М. Таланов) выделяются основные компоненты MS Access, к которым относятся:
— построитель таблиц;
— построитель экранных форм;
— построитель SQL-запросов;
— построитель отчётов [1].
Перечисленные построители предоставляют возможности по вызову скриптов на языке VBA, в связи с чем MS Access позволяет разрабатывать приложения и базы данных без особых усилий.
Встроенные средства по взаимодействию MS Access со внешними СУБД с использованием интерфейса ODBC снимают некоторые ограничения, которые присущи, например, Microsoft Jet Database Engine. Инструменты MS Access, позволяющие реализовать данное взаимодействие, называются «связанными таблицами» и «запросами к серверу», который «понимает» СУБД.
Корпорацией Microsoft для разработки полноценных клиент-серверных приложений на базе СУБД MS Access рекомендуется использование в качестве движка базы данных СУБД MS SQL Server. При этом существуют возможности по совмещению с MS Access простые инструменты для управления базами данных и необходимые средства разработки интерфейса [4].
MySQL представляет собой свободную реляционную систему управления базами данных. Разработку и поддержку MySQL осуществляет корпорация Oracle, которая получила права на торговую марку
вместе с Sun Microsystems, которой было ранее приобретена шведская компания MySQL AB. Функциональность MySQL может быть расширена по заказу пользователей, что обеспечивается за счет наличия механизма репликации.
В работе авторов (А.А. Аббакумов, А.И. Егунова, В.М. Таланов) отмечается, что гибкость СУБД MySQL обеспечивается поддержкой множества используемых типов таблиц: пользователям предоставляются возможности выбора как таблиц типа MylSAM, которые поддерживают полнотекстовый поиск, так и таблицы типа InnoDB, которые поддерживают транзакции отдельных записей [2]. Более того, в поставку СУБД MySQL входит специальный тип таблиц EXAMPLE, который позволяет выполнять создание новых типов таблиц.
СУБД MySQL была портирована на множество платформ: FreeBSD, Linux, Mac OS X, NetBSD, семейство операционных систем Windows. Существует также порт MySQL к OpenVMS. Важно отметить, что на официальном сайте СУБД MySQL для свободной загрузки предоставляются не только исходные коды, но и оптимизированные и откомпилированные под определенные ОС готовые модули MySQL.
К основным важным характеристикам СУБД MySQL можно отнести следующие: внутренние характеристики и переносимость; безопасность; масштабируемость и ограничения [3].
Внутренние характеристики и переносимость характеризуется следующими показателями:
— наличие быстрых дисковых таблиц на основе В-деревьев со сжатием индексов;
— наличие быстрых базирующаяся на потоках систем памяти;
— наличие хеш-таблиц в памяти, которые используются как временные таблицы;
— использование SQL-функций реализовано при помощи оптимизированных библиотек классов, обеспечивающих высокую производительность обработки информации.
Безопасность MySQL обеспечивается наличием системы, основанной на привилегиях и паролях, за счет чего обеспечивается гибкость и безопасность, и с возможностью верификации с удаленного компьютера. Пароли надежно защищены, т.к. они при передаче по сети при соединении с сервером шифруются.
Масштабируемость и ограничения обеспечивает управление очень больших баз данных. В компании MySQL AB используется СУБД MySQL для работы с распределенными базами данных, которые содержат 50 миллионов записей, кроме того, известны пользователи, использующие MySQL для работы с 60000 таблицами, включающими около 5000000000 строк.
Как отмечают авторы (А.А. Аббакумов, А.И. Егунова, В.М. Таланов) СУБД SQL Server обеспечивает ускорение работы критически важных приложений за счет новых технологий обработки памяти OLTP, обеспечивающее повышение производительности в десятки раз в процессе обработки транзакций. Хранение данных включает в себя технологии новых обновляемых хранилищ столбцов данных в памяти обрабатываемых запросов в сотню раз быстрее, чем это позволяют сделать традиционные решения [2]. На протяжении множества лет SQL Server является самой безопасной и наименее уязвимой корпоративной базой данных.
SQL Server разработана для использования в гибридных средах, включающих как локальные, так и облачные ресурсы. Новые средства в SQL Server и Microsoft Azure позволяют значительно упростить операции создания, исправления, резервного копирования и аварийного восстановления решений при помощи Microsoft Azure. Данные средства позволяют выполнить быстрый перенос базы данных SQL Server в облако с локальных ресурсов, что позволяет клиентам использовать существую-
щие преимущества глобальных центров и навыки обработки данных Microsoft.
Использование SQL Server обеспечивает получение высоких результатов анализа быстрее за счет использования платформы бизнес-аналитики, которая позволяет ускорить доступ, анализ, очистку и формирование внутренних и внешних данных. SQL Server и Microsoft Power BI позволяет упростить доступ пользователей к необходимым данным, что обеспечивает принятие быстрых и обоснованных решений.
Таким образом, проведенный обзор современных систем управления базами данных позволяет сделать следующие выводы. Системы управления базами данных обеспечивают оперативную обработку и консолидацию данных. Среди многочисленных систем управления базами данных можно выделить: Microsoft Access; MS SQL, MS SQL Server. Каждая систем имеет множество преимуществ и особенностей использования. В тоже время, можно порекомендовать использовать данные системы следующим образом: Microsoft Access — для автоматизации малых задач; MS SQL — для автоматизации более сложных задач и MS SQL Server — для работы с распределенными базами данных.
Список использованных источников
1. Аббакумов А.А., Акимов В.Л., Егунова А.И., Лещанкин К.А., Таланов В.М. Базы данных (MS Access, MySQL). Саранск: Изд-во СВМО, 2011. 112 с.
2. Аббакумов А.А., Егунова А.И., Таланов В. М. Базы данных (MS SQL Server). Саранск: Изд-во СВМО, 2015. 66 c.
3. Таланов В.М. Проектирование информационных систем и БД / В.М. Таланов, С.А. Федосин. Саранск: Изд-во МГУ, 2001. 72 с.
4. Таланов В.М., Федосин С.А. Проектирование информационных систем и баз данных. Саранск: Изд-во СВМО, 2013. 72 c.
Достоинства и недостатки СУБД — Сводные таблицы Excel 2010
Вы уже знаете, что СУБД является передаточным механизмом между прикладной программой и информационным хранилищем. База данных — это та логическая структура информационного хранилища, которая представляется прикладному программисту, взаимодействующему с данными посредством СУБД. СУБД обеспечивает физическую и логическую независимость прикладной программы от данных. Можно сказать, что необходимость использования СУБД в построении информационной системы практически доказана. Другое дело, используется ли при разработке ИС СУБД независимых разработчиков, или же система управления базами данных разрабатывается в рамках работы над самой информационной системой.
Рассмотрим преимущества и недостатки использования СУБД сторонних разработчиков, т. е. СУБД, предназначенных для широкого использования в структурах информационных систем.
Преимущества СУБД
Поддержка многозадачного и многопользовательского режимов
Абсолютное большинство современных СУБД рассчитано на работу в многозадачном и многопользовательском режиме. Первое означает, что СУБД может запускать одновременно несколько задач (потоков) обработки данных. Например, запускать запросы от пользователя и, одновременно, по расписанию запускать какие-либо задачи управления данными, скажем, резервное копирование, обмен данными с другими СУБД (репликации) и т. п. В многопроцессорных системах современные СУБД могут экономно распределять процессорную нагрузку между всеми выполняющимися потоками (распределять потоки между всеми процессорами).
С другой стороны, современные СУБД позволяют одновременно регистрироваться множеству пользователей. При этом, используя многозадачность, СУБД может одновременно обрабатывать запросы от множества пользователей. Все современные СУБД поддерживают транзакционные механизмы и блокировки для безопасной работы одновременно нескольких пользователей.
Система безопасности
Все СУБД, особенно промышленного типа (серверы баз данных), поддерживают систему ограничения доступа для различных пользователей и групп пользователей. Используя эту возможность, можно построить эффективную систему защиты конфиденциальности данных. При разработке информационной системы на основе СУБД можно просто воспользоваться уже готовой системой безопасности либо усовершенствовать ее, интегрировав систему безопасности ИС в систему безопасности СУБД. СУБД предоставляет разные механизмы ограничения доступа к данным: посредством представлений, хранимых процедур и функций, через непосредственное ограничение доступа к таблицам (ограничение операций, которые может выполнять пользователь в таблице). Кроме этого, СУБД позволяют хранить данные в зашифрованном виде если вдруг вы захотите скачать крокодильчик свомпи на компьютер
Резервное копирование
Резервное копирование — это простой и вместе с тем наиболее эффективный способ зашиты данных от повреждения. Современные СУБД обладают весьма мощной системой резервного копирования. Эта система позволяет производить резервное копирование без участия пользователя по расписанию или наступлению какого-либо события. Кроме этого, современные СУБД позволяют копировать не всю базу данных, а только те изменения, которые были в ней сделаны со времени последнего копирования (дифференциальное копирование). Также СУБД поддерживают и зеркальные базы данных, которые гарантированно содержат копию той или иной базы данных.
Поддержка транзакционных механизмов
Все современные СУБД поддерживают транзакционные механизмы. Эти механизмы являются одним из важных средств защиты данных от сбоев. Транзакции гарантируют, что даже после сбоя данные будут находиться в непротиворечивом состоянии. Использование транзакций в многопользовательской работе приводит к взаимодействию транзакций друг с другом, что может привести к получению неадекватной информации от информационной системы. Для предотвращения такой ситуации в СУБД предусмотрены довольно сложные механизмы блокировок, позволяющие устранить опасное взаимодействие.
Контроль целостности данных
Все СУБД поддерживают в том или ином виде контроль целостности баз данных. Этот контроль позволяет гарантировать уникальность ключей, непротиворечивость данных, хранящихся в столбцах таблиц, соответствие внешних и первичных ключей. Кроме этого, СУБД предоставляют наиболее мощный механизм поддержания корпоративной целостности — триггеры.
Поддержка стандартов
Разные СУБД в той или иной степени поддерживают существующие стандарты, в частности стандарты SQL. Наличие той или иной поддержки стандарта даст определенную гарантию (хотя и не полную) использовать последующие версии данной СУБД или переход на другую СУБД. Кроме этого, следование стандартам позволяет легче интегрировать ИС с другими информационными системами.
Масштабируемость
Разработчики СУБД большое значение придают масштабируемости своего продукта. Это означает, что:
- при улучшении аппаратной части компьютера (увеличения объема оперативной памяти, количества процессоров и т. д.) производительность системы должна увеличиваться;
- увеличение объемов обрабатываемой информации (объем баз данных, количество запросов за определенный промежуток времени) не должно сильно сказываться на производительности системы.
Разработчики СУБД уже многие годы работают над этой проблемой, улучшая масштабируемость своих СУБД от версии к версии. Это очень важное преимущество передынформационными системами, которые разрабатываются без использования СУБД широкого применения.
Показатели производительности
Большое значение придают разработчики СУБД показателям производительности. Это один из самых конкурентных показателей любой СУБД. Прикладной программист может полностью положиться на высокие показатели производительности СУБД и сосредоточиться на других свойствах разрабатываемой системы.
Наличие средств администрирования данных
Важнейшее достоинство использования СУБД общего назначения — это наличие в них всевозможного инструментария по администрированию базы данных. Как правило, СУБД предоставляет программы для визуальной разработки баз данных. Это первостепенное преимущество таких СУБД. Интерактивное взаимодействие с базой данных помимо разрабатываемой программы дает возможность разработчиком оперативно реагировать на меняющуюся ситуацию, появление новых требований, выявление ошибок и т. д. Кроме этого, для наиболее популярных СУБД имеется большое количество программ администрирования, созданных сторонними разработчиками).
Недостатки СУБД
Сложность сопровождения
Некоторые СУБД довольно сложны для администрирования. Для того чтобы использовать функциональность СУБД наиболее полно, требуется, чтобы администратор СУБД, администраторы баз данных, конечные пользователи, разработчики системы обладали определенными знаниями в области баз данных, а также в возможностях конкретной СУБД. Несомненно, обучение персонала или подбор квалифицированных кадров требует определенных материальных затрат, которые увеличиваются с повышением сложности программного продукта.
Размер СУБД
СУБД могут потребовать значительного дискового пространства и других ресурсов. Сами базы данных, в связи со сложной их структурой, также могут потребовать значительного дискового пространства.
Стоимость СУБД
Стоимость современных СУБД может быть очень существенной и достигать огромных сумм (до миллиона долларов). Кроме этого, требуются большие расходы на сопровождение системы. Все это, разумеется, войдет в стоимость разрабатываемой информационной системы и в стоимость ее эксплуатации.
::: ЦЕЛОСТНОСТЬ :::
Органическое моделирование
Subdivision Моделирование поверхностей особенно хорошо подходит для построения органических форм, таких как люди, животные и причудливые существа. Большинство существ и даже многие люди в современных фильмах созданы с использованием технологии Sub-D. Один из популярных сайтов с трехмерными моделями, Turbosquid, насчитывает более 3000 моделей в категории «Люди», более 5000 в категории «Животные» и более 500 в категории «Существа».SubD-NURBS отлично справляется с обратным проектированием сеток существ. Ниже вы можете увидеть, что мы можем считывать эти модели в системах на основе NURBS, таких как Rhino и Inventor. Вы можете увидеть качество поверхностей, которые в основном представляют собой непрерывность G2 на некоторых изображениях, которые имеют как Sub-D, так и NURBS. Мы показываем разбивку поверхности для пары моделей, чтобы дать вам представление о том, как будет выглядеть результирующее представление границы.
человек
Ниже приведены некоторые человеческие модели Sub-D, которые мы обработали с помощью SubD-NURBS (щелкните изображение, чтобы увеличить или воспроизвести видео):
Видео с суб-D и крупным планом NURBS | Крупный план главы Sub-D и NURBS |
Sub-D слева — NURBS справа (нажмите, чтобы увеличить) | Поверхность для NURBS |
импортировано в Autodesk Inventor | Поверхностный разрез головы |
Верхняя часть кузова Sub-D и NURBS | Полосатый дисплей Rhino Zebra, показывающий непрерывность |
Вот коллекция других изображений, сгенерированных из схем людей Sub-D (Щелкните, чтобы увеличить).
Существа
Вот некоторые существа, обработанные с помощью SubD-NURBS. Обратите внимание, что у некоторых существ были участки треугольников. Как вы можете видеть по сложности форм, обратная инженерия существ может оказаться очень сложной задачей. На самом деле большинство этих форм было бы чрезвычайно сложно, если бы не время, которое было бы непозволительно для проектирования с помощью любой системы моделирования NURBS.
Saakyan v. Modern Auto, Inc., 103 Cal.App 4th 383
ALDRICH, J.
ВВЕДЕНИЕ
В этом иске о травмах мы рассматриваем узкий вопрос, касающийся законодательных предложений о компромиссе в соответствии с Гражданским процессуальным кодексом Раздел 998 Проблема возникает из-за того, что это дело рассматривалось дважды. По итогам первого судебного разбирательства защита вынесла вердикт и приговор подсудимому, Modern Auto, Inc., которые затем были отменены путем удовлетворения ходатайства о новом судебном разбирательстве.По итогам второго судебного разбирательства истцам Оганесу Саакяну и Гарнику Пароняну был вынесен приговор. После второго судебного разбирательства суд отклонил ходатайства истцов о выплате гонорара свидетелям-экспертам (§ 998, подпункт (d)) и уплате процентов за вынесение приговора (Гражданский кодекс, § 3291) на том основании, что первый приговор аннулировал любые права, которые истцы могли получить В силу их раздела 998 предложений.
Все дальнейшие нормативные ссылки относятся к Гражданскому процессуальному кодексу, если не указано иное.
В опубликованной части этого заключения мы считаем, что установленное законом предложение о компромиссе в соответствии с разделом 998 не аннулируется судебным решением, которое отменяется последующим постановлением о новом судебном разбирательстве.Соответственно, мы отменяем порядок налогообложения затрат и возвращаем на повторное рассмотрение в соответствии с этим мнением.
В неопубликованной части этого мнения мы считаем, что во втором судебном разбирательстве не было нарушений присяжных, и подтверждаем решение.
ФАКТИЧЕСКАЯ И ПРОЦЕДУРНАЯ ИНФОРМАЦИЯ
Этот иск возник после того, как подростки, Саакян и Паронян вместе с двумя другими людьми, попали в серьезную аварию на шоссе 605 в июне 1992 года.
Доказательства, представленные на втором судебном процессе, показывают, что Саакян, водитель Honda Accord 1986 года, попавший в аварию, опускал автомобиль.Затем он начал искать новые диски для своих колес. Привлеченный «колесами Аэрофина» в рекламе журнала Low Rider, Саакян поинтересовался в Modern Auto об их наличии и цене.
29 июня 1992 года истцы и двое других прибыли в Modern Auto только для того, чтобы обнаружить, что Aerofins были проданы. По предложению владельца Modern Auto, Саакян согласился приобрести новое 15-дюймовое колесо с шестью спицами и шину, предназначенную для автомобиля BMW, причем эти колеса были шире, чем те, которые обычно устанавливаются на Honda Accord.
После того, как «Современное авто» установило новые колеса и шины на «Хонду» Саакяна, Саакян и трое других подростков проехали на автомобиле милю или две до автострады 605. Оказавшись на южной стороне автострады, Саакян остался в полосе номер четыре. Машина ехала красиво. Саакян проезжал милю со скоростью 50 или 55 миль в час, как вдруг машина дернулась налево. Несмотря на попытки Саакяна управлять автомобилем, он уехал вправо, в сторону от дороги. До аварии Honda работала так же, как и до установки колес и шин на Modern Auto.
Саакян получил необратимую травму спинного мозга, прикован к инвалидной коляске, и у него сокращенная продолжительность трудовой жизни.
У Пароняна травма грудной клетки, множественные переломы ребер и взрывной перелом тела первого поясничного позвонка. Он страдает хроническими болями. Он на 35 процентов является инвалидом и способен к полусидячему труду.
Двое других в машине не являются участниками апелляции.
Дело было в причинно-следственной связи. И ответчик, и истцы предоставили экспертные заключения по данному аспекту.Эксперт по вопросам обороны Эрнест Кляйн пришел к выводу, что ничто о транспортном средстве в том виде, в котором оно было оборудовано в то время, не могло бы заставить Honda отклониться в сторону или заставить автомобиль сделать что-нибудь необычное на гладкой поверхности шоссе 605. Ввиду отсутствия вещественных доказательств того, что автомобиль повернул налево, Кляйн пришел к выводу, что Саакян свернул вправо, чтобы избежать столкновения с движущимся впереди автомобилем.
Эксперт истца, Джеральд Розенблют, принес «доллар» — часть автомобиля, использовавшуюся в качестве модели зала суда — в качестве доказательного доказательства.Принято в качестве доказательства, бак состоял из крыла в сборе и подвески задней части Honda Accord 1986 года выпуска. Розенблют предположил, что катализатором аварии послужило то, что левое заднее колесо тормозило, отклоняя транспортное средство влево, после чего последовала чрезмерная коррекция, из-за которой автомобиль повернул вправо почти на 90 градусов. Две основные механические причины, по которым левое заднее колесо застряло, были: (1) неправильная установка дисков BMW на Honda и (2) состояние дисбаланса левой передней шины, вызванное способом, которым гайки крепления были затянуты.Розенблут объяснил, что колесо BMW, которое Modern Auto установило на автомобиль Саакяна, не предназначалось для Honda. Колесо BMW «центрировано по ступице», тогда как у Honda — система «с упором».
Жюри вынесло специальный вердикт, признав Modern Auto небрежным; его халатность стала причиной телесных повреждений и повреждений Саакяна и Пароняна; и что Саакяну был причинен экономический и неэкономический ущерб в размере 12 232 744 долларов, а Пароняну — 566 928,32 долларов в качестве ущерба. Присяжные также сочли, что Саакян не проявил халатности.
Подсудимый ходатайствовал о новом судебном разбирательстве и вынесении приговора, несмотря на приговор, вынесенный, в частности, по проступкам присяжных заседателей. Суд первой инстанции отклонил ходатайства ответчика. Ответчик подал апелляцию.
Истцы перешли на сумму более 8 000 000 долларов в счет гонорара за свидетеля-эксперта (§ 998, подраздел (d)) и процентов за вынесение приговора (Гражданский кодекс, § 3291). Суд отказал в удовлетворении просьбы. После этого истцы подали своевременную апелляцию на это постановление.
Дополнительные факты будут изложены в соответствующем обсуждении ниже.
ОБСУЖДЕНИЕ I.
Жалоба ответчика. A. Стандарт обзора .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B. Реконструкция не является нарушением правил поведения.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1. Факты .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2. Закон .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
C. Упоминание о страховании ответчика не неправомерных действий .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
D. Упоминание личного опыта не является противоправным поведением .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
E. Без ущерба .
. . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
II.
Встречная жалоба истцов.A. Суд первой инстанции допустил ошибку с точки зрения закона, постановив, что права истцов в соответствии со статьей 998 были аннулированы первым решением.
1. Факты .
Истцы сделали свои законодательные предложения о компромиссе в феврале 1994 года, перед первым судом. Саакян предложил внести судебное решение «на общую сумму 820 тысяч долларов».00. «В том же документе содержится предложение Пароняна» на общую сумму 115 000,00 долларов США. «Предложения не были приняты. Других предложений сделано не было.
По результатам первого судебного разбирательства ответчику был вынесен специальный приговор. Решение по нему было принято. Январь 1995 года. После этого суд удовлетворил ходатайство истцов о проведении нового судебного разбирательства на основании серьезного проступка присяжных и постановил отменить и отменить приговор по особому приговору. В ранее не опубликованном заключении этот суд подтвердил постановление суда первой инстанции о новом пробный.
После второго судебного разбирательства, как уже отмечалось, присяжные вынесли специальный вердикт, на этот раз в пользу истцов, присудив Саакяну 12 233 744 доллара и Пароняну 566 928,32 доллара в качестве компенсации ущерба. В соответствии с предложениями от февраля 1994 г. (Гражданский кодекс, § 3291) истцы заполнили меморандум о затратах, в котором запрашивались проценты за предварительное судебное решение в размере 7 976 420,00 долларов США для Саакяна и 369 667,78 долларов США для Пароняна (Гражданский кодекс, § 3291) вместе с примерно 204 000 долларов США в виде гонораров за свидетелей-экспертов (§ 998, подраздел (d)).
Ответчик возражал против иска о выплате процентов и перешел к налоговым расходам.В качестве одного из оснований для возражения ответчик утверждал, что вынесение решения в пользу ответчика после первого судебного разбирательства аннулировало любые права, которые истцы могли получить в соответствии с разделом 998.
Отметив, что в этом деле «произошло так много всего» и что оно чувствовал «решительно», что «не мог добросовестно удовлетворить ходатайство о предвзятом долге», суд первой инстанции отклонил требование истцов о предвзятом долге (Гражданский кодекс, § 3291) и отказал в требовании о гонораре за свидетеля-эксперта (§ 998, subd.(г)). Суд первой инстанции пояснил: «1) Предложение по разделу 998 Гражданского процессуального кодекса, поданное истцом [ sic ] в 1994 году, аннулировано в связи с приговором, вынесенным ответчику в первом судебном разбирательстве. [¶] 2) Кодекса не было. Гражданского процессуального права раздела 998 предложение подано во втором судебном разбирательстве » Суд обложил налогом запрошенные истцами расходы и отказал им в начислении процентов. Истцы своевременно подали апелляцию.
2. Закон .
В соответствии с разделом 998, подраздел (d), если установленное законом предложение истца о компромиссе не принято и ответчик не может добиться более благоприятного судебного решения, преобладающий истец получает право требовать разумные и фактически понесенные гонорары и расходы на свидетелей-экспертов.
В то время, когда были сделаны предложения истцов, в разделе 998, подраздел (d) в соответствующей части говорилось: «Если предложение истца не принимается и ответчик не может добиться более благоприятного судебного решения, суд по своему усмотрению может потребовать от ответчика уплаты разумной суммы для покрытия расходов на услуги свидетелей-экспертов … фактически понесенных и разумно необходимых при подготовке или судебном разбирательстве дела истцом либо в том, либо в другом, в дополнение к расходам истца.»(§ 998, подраздел (d).) В период с 1994 года, когда были сделаны предложения истцов, и до 2000 года, когда суд первой инстанции принял решение о налогообложении расходов, Законодательное собрание внесло поправки в подраздел (d) статьи 998. Ни одна из этих поправок имеет влияние на отдельный вопрос, представленный здесь.
Кроме того, в иске о причинении личного вреда, если соблюдены условия статьи 3291 Гражданского кодекса, истец имеет право получить проценты за предварительное судебное решение. В частности, в соответствии с разделом 3291 Гражданского кодекса, если ответчик не принимает предложение истца в соответствии с разделом 998, и истец получает более благоприятное решение, суд должен присудить проценты в размере 10 процентов годовых на это решение с даты первого предложения истца в соответствии с разделом 998 до тех пор, пока решение не будет принято. довольный.Право на предварительную выплату процентов в соответствии с разделом 3291 Гражданского кодекса зависит от того, получит ли истец более благоприятное судебное решение в соответствии с разделом 998. ( Gilman v. Beverly California Corp . (1991) 231 Cal.App.3d 121, 126.)
Статья 3291 Гражданского кодексагласит в соответствующей части: «Если истец делает предложение в соответствии с разделом 998 Гражданского процессуального кодекса, которое ответчик не принимает до суда или в течение 30 дней, в зависимости от того, что произойдет раньше, и истец получит При более благоприятном судебном решении по судебному решению будут начислены проценты по законной ставке 10 процентов в год, рассчитанные с даты первого предложения истца в соответствии с разделом 998 Гражданского процессуального кодекса, превышение которого вынесено судебным решением, и проценты начисляются до тех пор, пока удовлетворение судебного решения.»
Истцы утверждают, что суд первой инстанции ошибочно постановил, что вердикт присяжных в первом судебном разбирательстве аннулировал все права, которые истцы могли получить в соответствии с разделом 998 на основании их законодательных предложений о компромиссе, сделанных в 1994 году, которые не были приняты. Они требуют, чтобы мы вернули обратно. дело передается в суд с инструкциями по переоценке обоснованности и разумности предложений, и, если они действительны, рассчитать разумные гонорары свидетелей (§ 998, подраздел (d)) и добавить предвзятое мнение (Civ.Code, § 3291) от февраля 1994 года.
Если речь идет о применении закона к неоспоримым фактам, мы пересматриваем постановление суда первой инстанции de novo. ( Барелла против Exchange Bank (2000) 84 Cal.App.4th 793, 797.) Мы считаем, что суд первой инстанции допустил ошибку, установив, что льготы истцов в соответствии с их законными предложениями о компромиссе, сделанными в 1994 году, были «аннулированы из-за приговор подсудимому по первому делу «.
Ничто в формулировке этих законов не указывает на то, что судебное решение действует для прекращения прав в соответствии с разделом 998, где это решение позже отменяется и проводится новое судебное разбирательство.(См. Steinfeld v. Foote-Goldman Proctologic Medical Group, Inc. (1996) 50 Cal.App.4th 1542, 1550 [формулировка статьи 3291 Гражданского кодекса не указывает на процентные платежи во время вмешательства, безуспешной апелляции].) право свидетеля на гонорары и предвзятое мнение основано на более благоприятном решении . Раздел 998 применяется, когда предложение истца «не принято и ответчик не может добиться более благоприятного судебного решения». Аналогичным образом, в разделе 3291 Гражданского кодекса проводится «простое сравнение» судебного решения и официального предложения о компромиссе.( Лакин против Уоткинса Ассошиэйтед Индастриз (1993) 6 Cal.4th 644, 662-663, fn. 13.)
Согласно законам Калифорнии, когда суд первой инстанции назначает новое судебное разбирательство по всем основаниям иска, решение отменено. ( Биверс против Allstate Ins. Co . (1990) 225 Cal.App.3d 310, 329.) Влияние приказа о назначении нового судебного разбирательства «как будто никакого судебного разбирательства никогда не проводилось … Дело [находится] в суде для рассмотрения de novo ». [Цитата.] «( Guzman v.Верховный суд (1993) 19 Cal.App.4th 705, 707, первоначальный курсив.) Разрешение на новое судебное разбирательство «[оставляет] дело на свободе, и стороны [оказываются] в таком же положении, как если бы оно никогда не было судили … »» ( Сихтерман против RM Hollingshead Co . (1931) 117 Cal.App. 504, 506; см. также Fountain Valley Chateau Blanc Homeowner’s Assn. против Департамента по делам ветеранов (1998) 67 Cal.App.4th 743, 751.) Следовательно, любой приговор или приговор, вынесенный до вынесения нового судебного постановления, был просто эфемерным, поскольку заменялся приговором, вынесенным после нового судебного разбирательства.
«Независимо от того, отменяет ли судебное решение апелляционной инстанцией … или суд первой инстанции принимает новое ходатайство, эффект тот же …». ( Guzman v. Superior Court, supra , 19 Cal.App.4th at p. 708.)
В данном случае результатом разрешения суда первой инстанции на новое судебное разбирательство было аннулирование первого судебного решения, вынесенного в 1995 г. ни решение, вынесенное после первого судебного разбирательства, ни специальный вердикт, на котором оно было основано, не могут аннулировать какие-либо выгоды, которые могли возникнуть в соответствии с разделом 998.Постановление о предоставлении истцам нового судебного разбирательства, которое мы подтвердили в первой апелляции, отменило решение 1995 года и поставило стороны в такое же положение, как если бы дело никогда не рассматривалось ( Sichterman v. RM Hollingshead Co ., supra , 117 Cal.App. На стр. 506), с любыми правами в соответствии с законными предложениями истцов. То, что промежуточное решение 1995 года было вынесено в пользу ответчика, не имеет значения, поскольку это решение было отменено вторым решением в пользу истцов.Таким образом, с точки зрения гражданского судопроизводства Калифорнии не существовало промежуточного вердикта или судебного решения для отмены льгот, которые могли возникнуть в результате более ранних законодательных предложений о компромиссе. 10
Ссылка ответчика на новые судебные постановления « восстанавливает права истца по разделу 998» не убеждает. Не было ничего, что могло бы воскресить , если бы выгода, возникающая в результате отказа ответчика принять предложение, оставалась в силе. ( Beavers v.Allstate Ins. Co ., supra , 225 Cal. Приложение. 3d на стр. 329; ср. Хесс против Ford Motor Co . (2002) 27 Cal.4th 516 [отмена упрощенного судебного решения после отклонения предложения истца 998; не обсуждалось, что отмененное судебное решение прекращает право на предопределение процентов]; Steinfeld v. Foote-Goldman Proctologic Medical Group, Inc., выше , 50 Cal.App.4th, pp. 1550-1551 [несколько промежуточных новых судебных постановлений после отклонения предложения истцов 998; не обсуждалось, что новые судебные процессы прекращают право на предвзятое мнение].)
Мы отвергаем аргумент ответчика о том, что наш холдинг действует как сдерживающий фактор для урегулирования и подрывает политику, лежащую в основе этих законов. 11 Напротив, капризы судебного процесса, включая возможность неправомерного поведения присяжного или отмены апелляции, что увеличивает расходы противной стороны, являются частью риска, присущего отклонению предложения по разделу 998. В любом случае приказ о новом судебном разбирательстве не препятствует любой из сторон пытаться урегулировать заново, тем самым способствуя государственной политике в пользу урегулирования.Кроме того, одна из главных целей статьи 3291 Гражданского кодекса состоит в том, чтобы «предоставить справедливую компенсацию потерпевшей стороне за потерю возможности использовать арбитражное решение в течение периода до вынесения решения — другими словами, чтобы истец был полностью здоров на дату причинения вреда. . » ( Лакин против Уоткинса Ассошиэйтед Индастриз, см. Выше, 6 Cal.4th, стр. 663.) Ответчику не должно быть позволено воспользоваться неправомерным поведением присяжного заседателя (которое неправомерное поведение ни истцы, ни ответчик не вызвали), чтобы избежать последствий риска, связанного с этим. взял, отклонив законодательные предложения о компромиссе и заставив дело передаться в суд.В противном случае ответчик получил бы непредвиденную прибыль за счет истцов, которые никогда не могли быть восстановлены на момент получения им травм. Если бы вмешались недействительные судебные решения по аннулированию предложения по разделу 998, этот риск был бы уменьшен, а цели устава — поощрить разумное урегулирование исков о причинении личного вреда, снизить спрос на наши перегруженные суды, наказать тех, кто отказывается от разумных предложений урегулирования, и компенсировать истец о потере возможности использовать арбитражное решение в ожидании результата ( там же.; Hrimnak v. Watkins (1995) 38 Cal. App 4th 964, 980-981) — будет подорвано.
Таким образом, суд первой инстанции допустил ошибку с точки зрения закона, заключив, что первое решение, вынесенное в 1995 году в пользу ответчика, которое было отменено назначением нового судебного разбирательства, аннулировало любые льготы, которые истцы могли иметь в соответствии с разделом 998.
3. Дело должно быть возвращено для пересмотра ходатайств за и против расходов и предоплаты процентов .
Наш вывод о том, что ничто в первом отмененном судебном решении не аннулировало какие-либо права, которые могли возникнуть в результате законных предложений истцов об урегулировании, не прекращает дела.Ходатайство ответчика о налоговых затратах и возражение против выплаты процентов за предварительное судебное решение привело к ряду других аргументов, почему суд первой инстанции не должен удовлетворять их просьбу о выплате платы за свидетелей и процентов за вынесение приговора. Хотя суд первой инстанции упомянул две причины налогообложения расходов во время устных прений, в протоколе указывалось только погашение в качестве причины для удовлетворения ходатайств ответчика.
Поскольку нижестоящий суд не рассмотрел другие аргументы, выдвинутые сторонами в поддержку и против ходатайства о налоговых затратах, суд первой инстанции должен вновь рассмотреть этот вопрос и определить, были ли предложения действительными и разумными по всем обстоятельства, в то время, когда они были созданы, и если да, то установите размер комиссионных и процентов.( Wickware v. Tanner (1997) 53 Cal.App.4th 570, 575-576; Elrod v. Oregon Cummins Diesel, Inc . (1987) 195 Cal.App.3d 692, 699-700; Wear v. Calderon (1981) 121 Cal.App.3d 818, 821; Moffett v. Barclay (1995) 32 Cal.App.4th 980, 982-984 [недействительное установленное законом предложение об урегулировании приводит к отмене всех льгот в соответствии с разделом 998 , в том числе предвзятое решение].) Мы не рассматриваем обоснованность или разумность предложений и не занимаем никакой позиции в отношении того, как суд первой инстанции должен принять решение.В свете этого мнения постановление о заявлении ответчика о возмещении налоговых расходов, внесенное 15 ноября 2000 г., должно быть отменено и возвращено для пересмотра действительности и разумности предложения по статье 998 в свете всех обстоятельств.
РАСПОРЯЖЕНИЕ
Решение подтверждено; Постановление о заявлении ответчика о возмещении налоговых расходов от 15 ноября 2000 г. отменено и возвращено для дальнейшего разбирательства в соответствии с этим мнением. Каждая сторона несет свои расходы по апелляции.
Мы согласны:
KLEIN, P. J.
CROSKEY, J.
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Современный дом и участок с 6 спальнями на продажу в Greenwoods Subd, недалеко от А. Сандовал Ph3005
Ph3005 Современный дом и участок на продажу в Greenwoods Subdivision Pasig, недалеко от проспекта А. Сандовал и Мерседес.
ТОЛЬКО ДЛЯ ПРЯМЫХ ПОКУПАТЕЛЕЙ! Подробнее Площадь = 150 кв.м РЯДОМ: Продуктовый магазин: Торговые центры и рестораны: Школы: Больницы: Транспорт: Аптека: Религиозные учреждения: ОБРАЗЕЦ РАСЧЕТА для Pasig Детали платежа: Общая стоимость: 16,000,000 Резервирование: 9165 9165 Первоначальный взнос 4 Банковское финансирование (фиксирование на начальные 5 лет): 5 лет под 8,5% годовых 229,785 10 лет по ставке 8.5% годовых 138,864 15 лет под 8,5% годовых 110,291 20 лет под 8,5% годовых 97,196 Все объекты Традиционный таунхаус на одну семью Другой кондоминиум на ранчо Ранчо ремесленника, Традиционный ремесленник, Традиционное современное бунгало Бизнес-центр A-образной формы Смешанное использование Неулучшенная земля Потенциальный коммерческий дуплекс Европейский ремесленник, апартаменты на ранчо Коттедж Фермерский дом A -рамка, Традиционный современный, Традиционный офисный колониальный европейский Кейп-Код, Традиционный мобильный ремесленник, Ранчо, Традиционный торговый домик Country Многосемейный традиционный, Другой колониальный, Традиционный традиционный, Традиционный промышленный ранчо, Традиционный ремесленник, Современный европейский, Бунгало на ранчо, Бунгало в коттедже, Ремесленник Ремесленник, Традиционный фермерский дом, Фермерский дом Кейп-Код, Традиционное викторианское бунгало, Традиционное традиционное, Современное с А-образной рамой, Бунгало Ремесленника, Модульное Тудорское традиционное здание на ранчо, Четырехместный дом на колесах Кейп-Код, Традиционный фермерский дом, Ранчо Triplex Contemporary, Ремесленник, Традиционный ремесленник, O The Cottage, Традиционный деревенский традиционный, Колониальный коттедж, Традиционный ранчо-церковный, Традиционный кластерный домашний склад, Современная деревня, Деревенская деревня, Традиционный французский провинциальный традиционный, Сельский традиционный, Тюдоровский край, Ремесленник на ранчо, Фермерский дом, Средиземноморское ранчо, Загородное ранчо, Бунгало ремесленника , Коттедж, Ранчо Бунгало, Ранчо, Традиционный домик, Современная деревня, Современная европейская, Ремесленник из фермерского дома, Другой европейский, Традиционное ранчо, Другое традиционное, Современный коттедж, Другое ранчо, Домик в фермерском доме, Страна, Ремесленник в деревенском кластере, Дом на ферме, Традиционный мобильный, Модульное традиционное, Мастер по бунгало, Мастер по бунгало, Традиционный, Фермерское ранчо, Традиционный коттедж, Современная французская провинция, Ремесленник, Ремесленник на ферме, Европейский, Традиционный европейский, Другое ранчо, Бунгало-ранчо, Деревенское бунгало, Ремесленник, Традиционный современный, Европейский, Традиционный таунхаус, Традиционный традиционный, викторианский коттедж, деревенский A- рамка, Современная А-образная рама, Ранчо Кейп-Код, Коттедж Шале Коттедж, Ремесленник, Ранчо Кантри, Ранчо, Традиционный ремесленник, Традиционный деревенский, Средиземноморский традиционный, Деревенский А-образный профиль, Бунгало Кейп-Код, Загородный Кейп-Код, Ранчо Колониальное, Ремесленник, Традиционный Коттедж, Коттедж мастера, Фермерский дом, Традиционный коттедж, Ранчо, Традиционная страна, Коттеджный поселок, Ремесленник, Европейский Кейп-Код, Французский провинциальный фермерский дом, Ранчо, Традиционный фермерский дом, Деревенский ранчо, Современное ранчо, Мобильная А-образная рама, Коттедж-бунгало, Коттедж, Ремесленник Бунгало, Ремесленник, Ранчо Кейп-Код, Ремесленник Колониальный, Дом, Традиционный современный, Коттедж Современный, Страна, Коттедж Ремесленника, Загородный Дом, Дом Ремесленник, Коттедж Ремесленник, Ранчо, Ремесленник Фермы, Традиционный, Ремесленник в форме буквы А, Традиционный, Другой европеец , Средиземноморская французская провинция, Традиционное ранчо, А-образная рама, Кейп-Код, А-образная рама, Колониальный стиль, Традиционная А-образная рама, Другой домик, Современное шале, Ремесла человек, Современное ранчо, Фермерский дом, Другой коттедж, Загородный коттедж, Ремесленник, Традиционная деревня, Фермерский дом, Ранчо, Фермерский дом, Традиционная страна, Другой ремесленник, Деревенский ремесленник, Традиционный, Ранчо европейский, Фермерский сад (1 уровень) Другое, Ранчо Ранчо, Бунгало, Коттедж-ранчо, Загородный, Деревенский ранчо, Традиционный, Бунгало-ранчо, Традиционный, Деревенский деревенский стиль, Традиционный А-образный профиль, Колониальный А-образный профиль, Ранчо, Традиционное бунгало, Коттедж, Традиционный коттедж, Шале, Загородный Кейп-Код, Коттедж, Традиционный кластер Дом, Современная традиционная культура, Современная деревня, Ремесленник, Современная деревня, Ранчо, Современная традиция, Традиционный, Другой коттедж, Другая страна, Страна коттеджа, Ремесленник, Страна ранчо, Ремесленник, Традиционная страна, Ферма, Ремесленник в деревенском стиле, Современный мастер, Дом с патио, Традиционный ремесленник, Традиционный, Коттеджный европейский, Ранчо, Традиционный европейский, Сельский фермерский дом, Загородное ранчо, Колониальное ранчо, Сад (1 уровень) Ранчо, Модульное ранчо, Тр дополнительный, Традиционный фермерский дом, Бунгало, Традиционный ремесленник, Кантри, Деревенский А-образный профиль, Ремесленник А-образный профиль, Ремесленник, Традиционный А-образный профиль, Лофт, Традиционное бунгало, Современное бунгало, Современное, Бунгало ранчо, Другой домик, Коттеджный домик, Кантри, Шале Кейп-Код, Фермерский дом Кейп-Код, Ранчо, Традиционный колониальный стиль, Современный ремесленник, Коттедж, Современный фермерский дом, Европейский, Средиземноморский коттедж, Страна, Коттедж мастера, Ремесленник, Коттедж на ферме, Дом на ферме, Коттедж на ранчо, Страна Тюдоров, Ремесленник, Загородный дом, Ранчо , Ремесленник в деревенском стиле, Мастер с А-образной рамой, Мастер кластерного дома, Ремесленник в колониальном стиле, Дом на ферме, Ремесленник в деревне, Ранчо, Ремесленник в деревне, Мастер таунхауса, Традиционный, Ремесленник Кейп-Код, Традиционный, Европейский, Сельский дом, Традиционный европейский, Ранчо, Фермерский дом , Другой, Ранчо Ферма, Ранчо, Загородный Дом, Ранчо, Другой мобильный, Модульный, Ранчо Другое, Европейское Ранчо, Европейское Ранчо, Традиционное, A-frame Traditiona l, Бунгало, Традиционный коттедж, Колониальный, Традиционный фермерский дом, Коттедж, Традиционный фермерский дом, Ремесленник, Традиционный фермерский дом, Ремесленник, Традиционное ранчо, Европейский, Французский традиционный провинциальный, Сад (1 уровень), А-образная рама ранчо, А-образная рама коттеджа, Фермерский дом Бунгало, Коттедж, Коттедж-бунгало, Бунгало Кейп-Код, Загород, Ранчо-бунгало, Ранчо, Коттедж-бунгало, Ранчо, Бунгало на ферме, Викторианский домик, Коттедж Кейп-Код, Коттедж, Деревенский домик, Страна, Домик мастера, Домик мастера, Ремесленник, Деревенский домик , Дом на ранчо, Традиционный Кейп-Код, Современный Кейп-Код, Ремесленник, Фермерский дом Кейп-Код, Фермерский дом, Традиционный кластерный дом, Фермерский дом в колониальном стиле, Современный колониальный, Фермерский дом в колониальном стиле, Другой колониальный стиль, Колониальный ранчо, Традиционный, Современный викторианский, Современный в А-образной форме, Колониальный Современное искусство, Ремесленник, Современное искусство кластера, Европейское, Современное ранчо, Дом на ферме, Современное ранчо, Современное французское провинциальное искусство, Другое, Современное искусство фермерского дома, Ранчо, A-frame Con временный, Современный деревенский, Современный таунхаус, Традиционный, Современный фермерский дом, Традиционный, Деревенский коттедж, Коттедж-бунгало, Коттедж-коттедж, Кантри, Коттедж-ранчо, Загородный, Традиционный коттедж, Ремесленник, Загородный коттедж, Европейский коттедж, Фермерский дом, Другой коттедж, Сад (1 Уровень), Ранчо, Традиционный, Кластерный домашний коттедж, Викторианская страна, Хижина, Деревенская страна, Колониальная страна, Коттедж, Сельский дом, Ранчо, Коттеджный поселок, Ранчо, Сельский дом, Деревенский, Деревенский, Традиционный деревенский, Традиционный, Сельский дом, Традиционный, Сельский ремесленник, Европейский, Французский провинциальный ремесленник, Ранчо, Коттеджный ремесленник, Ранчо, Европейский ремесленник, Ранчо, Сад (1 уровень) Ремесленник, Ранчо, Деревенский ремесленник, Традиционный, Европейское бунгало, Колониальный европейский, Французский провинциальный, Традиционный Европейская, Средиземноморская, Традиционная европейская, Таунхаус в Европе, Таунхаус, Традиционная европейская, Традиционная, Французская провинциальная европейская, Традиционная, Средиземноморская Европейский, Традиционный, Тюдоровский фермерский дом, Традиционный, Деревенский французский Провинциальный, Ранчо-сад (1 уровень), Ранчо, Традиционный мобильный, Другой мобильный, Ранчо Другое, А-образная рама, Другой, Коттедж, Другой, Колониальный, Другой, Сельский, Ранчо, Традиционный, Другой, Домашнее ранчо в деревенском патио, Коттеджное ранчо, Ремесленник, Фермерское ранчо, Французское провинциальное ранчо, Домашнее ранчо с патио, Деревенский стиль, Традиционное ранчо, Традиционное, Сад (1 уровень) Ранчо, Традиционный, Другой деревенский, Коттедж, Традиционное шале, Традиционное коттедж, Современный, Традиционный ремесленник, Страна, Традиционный фермерский дом, Страна, Традиционный ранчо, Ремесленник, Традиционный европейский, Европейский, Традиционный ранчо, Фермерский дом, Традиционный деревенский, Патио дома А-образная рама, Бунгало, А-образная рама ранчо, Бунгало, Традиционная А-образная рама, Домик, А-образная рама в деревенском стиле, А-образная рама Кейп-Код, А-образная рама кластерного дома, Современная, Традиционная А-образная рама, Коттедж, А-образная рама в деревенском стиле, Коттедж, Традиционная А-образная рама, Кантри, А-образная рама в колониальном стиле, Ремесленник, Кабина А- рама, Ремесленник, Дом А-образный, Дом на ферме, Традиционный А-образный профиль, А-образный лофт, Другой, А-образный профиль ранчо, А-образный профиль таунхауса, Традиционное, Современное бунгало, А-образное бунгало, Коттедж-бунгало, Кейп-Код, Коттедж-бунгало, Шале-бунгало, Шале, Европейское бунгало, Кластер Домашнее бунгало, Колониальное, Бунгало мастера, Современное, Коттедж-бунгало, Ремесленник, Бунгало Кейп-Код, Ремесленник, Современное бунгало, Ремесленник, Коттедж-бунгало, Европейский, Традиционное бунгало, Европейское, Бунгало Тюдоров, Бунгало фермерского дома, Фермерский дом, Бунгало с рамкой Бунгало, Ранчо, Домашнее бунгало с патио, Ранчо, Деревенское бунгало, Деревенское бунгало, Традиционное, Коттедж-бунгало, Традиционное, Деревенское бунгало, Тюдорский коттедж, Кейп-Код, Коттеджный коттедж, Шале, Ранчо-коттедж, Шале, Деревенский коттедж, Современный коттедж, Загородный, Коттеджный домик, Страна, Традиционный домик, Ремесленник, Домик шале, Ремесленник, Традиционный домик, Передвижной домик, Мобильный, Деревенский домик, Ранчо, Деревенский домик, Ранчо, Традиционный домик, Деревенский стиль, Коттедж в загородном стиле, Деревенский, Другой Кейп-Код, Коттедж Кейп-Код , Колониальный, Традиционный Кейп-Код, Коттедж, Ремесленник Кейп-Код, Коттедж, Европейский Кейп-Код, Страна, Коттедж Кейп-Код, Страна, Фермерский дом Кейп-Код, Страна, Ранчо Кейп-Код, Страна, Традиционный Кейп-Код, Ремесленник, Традиционный Кейп-Код, Традиционный , Колониальный Кейп-Код, Традиционный, Коттеджный Шале, Современный, Европейское Шале, Другое Шале, Деревенское Шале, Традиционный кластерный дом, Европейский кластерный дом, Европейский, Традиционный кластерный дом, Средиземноморье, Дом-кластер с патио, Дом-кластер с патио, Традиционный, Другое Колониальный, Колониальный бунгало, Кейп-Код, Колониальный фермерский дом, Современный, Другой колониальный, Коттеджный Колониальный, Коттедж, Традиционный Колониальный, Деревенский Колониальный, Страна, Традиционный колониальный, Ремесленник, Деревенский Колониальный, Европейский Колониальный, Европейский, Колониальный ранчо, Европейский, Традиционный Колониальный, Европейский, Викторианский колониальный, Модульный колониальный, Другой, Традиционный колониальный, Ранчо, Традиционный колониальный, Деревенский колониальный, Таунхаус в колониальном стиле, Традиционный, Другой колониальный, Tudor Con временный, Современное бунгало, Современное коттедж, Коттедж, Современное шале, Современное шале, Шале, Современное деревенское, Современное кластерное домашнее, Колониальное, Современное традиционное искусство, Коттедж, Современное искусство ремесленников, Коттедж, Современное ранчо, Коттедж, Современное традиционное искусство, Кантри, Современное европейское искусство, Ремесленник, Современный стиль в форме А, Ремесленник, Современный домик, Ремесленник, Современник европейской кухни, Ремесленник, Современное искусство другого типа, Европейский, Современное деревенское искусство, Европейский, Современный таунхаус, Дом на ферме, Современное бунгало, Фермерский дом, Современное искусство ремесленника, Дом на ферме, Современное европейское искусство, Дом на ферме, Традиционный Современный, Современный лофт, Лофт, Современный традиционный, Средиземноморский современный, Среднеэтажный (до 5 этажей) Современный, Другой, Современный традиционный, Ранчо, Современный фермерский дом, Ранчо, Современный деревенский, Традиционный, Современный стиль А-образной формы, Традиционный, Современный Колониальный , Традиционный, Современный загородный дом, Традиционный, Дом с патио Коттедж, Домик, Загородный коттедж, Загородный, Загородный коттедж, Загородный, Деревенский коттедж, Ремесленник, Бунгало Коттедж, Ремесленник, Коттедж-коттедж, Ремесленник, Шале Коттедж, Ремесленник, Европейский коттедж, Ремесленник, Деревенский коттедж, Ремесленник, Тюдоровский коттедж, Европейский, Французский Провинциальный коттедж, Фермерский дом, Коттедж-бунгало, Фермерский дом, Викторианский коттедж, Французский провинциальный коттедж, Дом с патио, Коттедж на ранчо, Ранчо, Коттедж-бунгало, Деревенский коттедж, Деревенский, Загородный коттедж, Традиционный, Европейский коттедж, Традиционный, Сельский дом, Страна Кейп-Код, Колониальный, Страна таунхаусов, Коттедж, Страна Ремесленников, Коттедж, Европейская страна, Коттедж, Другая страна, Ремесленник, Страна хижины, Ремесленник, Другая страна, Ремесленник, Деревенская страна, Европейский, Деревенская страна, Другой, Страна ранчо, Ранчо, Страна коттеджа, Ранчо, Французская провинциальная страна, Ранчо, Сад (1 уровень) Страна, Традиционный, Ранчо, Традиционный, Викторианский ремесленник, Бунгало, Коттедж Ремесленника, Бунгало, Ранчо Мастера, Хижина, Граф y Ремесленник, Кейп-Код, Ремесленник из шале, Современник, Ремесленник из фермерского дома, Коттедж, Ремесленник в деревенском стиле, Коттедж, Традиционный мастер, Страна, Ремесленник с ранчо, Европейский, Ремесленник с ранчо, Дом на ферме, Французский провинциальный мастер, Дом на ферме, Другой мастер, Дом на ферме, Ремесленник в деревенском стиле, Сад (1 уровень) Ремесленник, Сад (1 уровень), Ремесленник на ранчо, Лофт, Традиционный мастер, Мобильный, Традиционный мастер, Модульный, Ремесленник на ранчо, Другой, Традиционный мастер, Другой, Викторианский ремесленник, Ранчо, Мастер бунгало, Ранчо, Домик , Ранчо, Ремесленник Кейп-Код, Ранчо, Ремесленник-чердак, Ранчо, Мобильный мастер, Ранчо, Ремесленник Дома Патио, Ранчо, Ремесленник Тюдоров, Деревенский, Ремесленник Хижины, Деревенский, Традиционный мастер, Таунхаус, Традиционный ремесленник, Традиционный, Ремесленник Шале, Традиционный, Мастер кластерного дома, Традиционный, Европейский мастер, Традиционный, Мастер чердаков, Традиционный, Мастер домашнего двора, Традиционный, Деревенский европейский, Европейский Кейп-Код, Европейский шале, Шале, F rench Provncial European, Contemporary European, Contemporary, Other European, Farmhouse, Craftsman European, Farmhouse, French Provncial European, French Provncial, Средиземноморская европейская, Французская провинция, Ranch European, French Provncial, Тюдоровская европейская, Средиземноморская, Ranch European, Other, Cottage European , Ранчо, Сад (1 уровень) Европейский, Традиционный, Кластерный Дом Европейский, Традиционный, Коттеджный европейский, Традиционный, Другой европейский, Тюдоровский дом, Фермерский дом с А-образной рамой, А-образный каркас, Загородный дом, Коттедж, Коттедж, Фермерский дом, Коттедж, Загородный дом , Кейп-Код Ферма, Кейп-Код, Загородный дом, Колониальный фермерский дом, Страна, Деревенский фермерский дом, Фермерский дом ремесленника, Мобильный, Модульный фермерский дом, Другой фермерский дом, Другой, Колониальный фермерский дом, Другой, Коттеджный фермерский дом, Другой, Традиционный фермерский дом, Ранчо, Фермерский дом Кейп-Код , Деревенский, Коттеджный дом, Традиционный, Европейский фермерский дом, Традиционный, Другой французский Провинциальный, Европейский Французский Провинциальный, Средиземноморский, Традиционный Французский Провинциальный, Другой французский провинциальный, ранчо, традиционный сад (1 уровень), дом с патио, сад ранчо (1 уровень), лофт ранчо Среднеэтажный (до 5 этажей) мобильный, ранчо, модульный модульный, мобильный модульный, ранчо модульный, ранчо, традиционный Другой, Современный Другой, Современный, Другой европейский, Кантри, Другой деревенский, Другой фермерский дом, Фермерский дом, Другой мобильный, Средиземноморский Другой, Викторианский дом с патио, Традиционное ранчо, А-образная рама, Патио Домашнее ранчо, Бунгало, Загородное ранчо, Коттедж, Коттедж-ранчо , Домик, Загородное ранчо, Коттедж, Фермерское ранчо, Домик, Деревенское ранчо, Кейп-Код, Фермерское ранчо, Шале-ранчо, Коттедж, Ранчо мастеров, Коттедж, Европейское ранчо, Страна, Коттеджное ранчо, Страна, Фермерское ранчо, Ремесленник, Традиционное ранчо, Европейский, Средиземноморское ранчо, Европейский, Традиционное ранчо, Мобильный, Модульное ранчо, Таунхаус-ранчо, Традиционный, Коттедж-ранчо, Традиционный, Ранчо ремесленников, Традиционный, Средиземноморское ранчо, Традиционный, Деревенский деревенский стиль, Коттедж в деревенском стиле, Коттедж, Деревенский деревенский стиль, Деревенский домик, Традиционный , С abin Деревенский, Традиционный, Деревенский деревенский стиль, Традиционный, Другой деревенский, Традиционный, Таунхаус ранчо, Европейский Таунхаус, Традиционный, Традиционный кластер для дома, А-образная форма, Традиционный колониальный стиль, Бунгало, Традиционный Кейп-Код, Кейп-Код, Традиционный для кластера, Кейп-Код, Традиционный коттедж, Кейп-Код, Европейский традиционный, Колониальный, Традиционный ремесленник, Колониальный, Европейский традиционный, Колониальный, Викторианский традиционный, Современный, Традиционный фермерский дом, Современный, Традиционный ранчо, Современный, Традиционный деревенский, Коттедж, Традиционный ремесленник, Страна, Традиционный коттедж, Европейский , Традиционный средиземноморский, Европейский, Традиционный тюдоровский, Фермерский дом, Другой традиционный, Фермерский дом, Традиционный ранчо, Традиционный сад (1 уровень), Традиционный лофт, Традиционный мобильный, Традиционный модульный, Другой, Традиционный с А-образной рамой, Другое, Традиционное бунгало, Другое, Колониальный Традиционный, Другой, Тюдоровский традиционный, Ранчо, Традиционный кластер, Ранчо, Сад (1 уровень) Традиционный, Ранчо, Рустик Посмотрите современные фермерские дома на продажу в Техасе. Современный стиль фермерского дома противоположен холоду и неприветливости. Вы можете даже бороться с гостями, которые никогда не захотят покидать ваш красивый дом! Это идеальное сочетание традиционного и ностальгического со свежим, современным и новым, с упором на простоту. Вдохновленный природой и органическими материалами, он создает впечатление аутентичности и отсутствия претенциозности, что делает его очень привлекательным.Люди не могут насытиться теплой, гостеприимной и комфортной атмосферой и атмосферой. Если вы реконструируете дом, стоит подумать об этом, так как он невероятно популярен среди потенциальных покупателей благодаря своему универсальному стилю и тому, как он хорошо сочетается с другими стилями. Перестройка в современном фермерском стиле не стоит целого состояния — простые улучшения, такие как добавление шипов, монохромных цветов окраски, некоторых современных номеров домов и некоторого обновленного оборудования (например, матового черного или матовой латуни), будут иметь огромное значение. Некоторые из наиболее общих черт современных домов в фермерском стиле включают: белый фасад с элементами из натурального дерева (например, двери и ставни), большие крытые веранды, множество окон, освещение сарая, двускатные или А-образные крыши (иногда сделанные из металл), большая входная дверь и современный номер дома, обшивка из корабельного лабиринта, обшивка из досок и обрешетки, шкафы для мебели, двери сараев, гаражные двери каретного типа и натуральное дерево повсюду — от полов, открытых потолочных балок и дверей до винтажной мебели и восстановленные предметы.Современные фермерские дома часто характеризуются большими окнами и акцентом на естественное освещение. У них также есть открытая планировка этажей с минимальным использованием стен, чтобы создать уютную атмосферу для семейных встреч или вечеринок. Сожалеем, некоторые части веб-сайта Airbnb не работают должным образом без включенного JavaScript. Найдите и забронируйте уникальное жилье на Airbnb Гости согласны: в этих вариантах проживания высокие оценки за расположение, чистоту и многое другое. Коттедж целиком · 8 гостей · 5 спальных мест · 1 ванная Шале Gambo Pond Совершенно новое, частное, современное шале в красивом центре Ньюфаундленда. На берегу пруда Гамбо. Дом для одних из лучших на острове лосося и форели, а также бесконечные мили лесозаготовок и ресурсных дорог для транспортных средств для отдыха. Снегоступы в салоне. Большая дровяная печь в основной гостиной с большим количеством сухих дров создаст теплую уютную атмосферу, чтобы расслабиться и насладиться видом на пруд.Свяжитесь с хозяином, чтобы узнать о возможных приключенческих турах с гидом. Бунгало целиком · 8 гостей · 4 кровати · 1,5 ванные комнаты Современный дом в центре города! Красивый современный дом со множеством удобств. Яма для костра, большая терраса, барбекю, столовая на открытом воздухе, крытая зона отдыха на открытом воздухе.
Дровяной камин и кондиционер! Коттедж целиком · 2 гостя · 1 кровать · 1 ванная Частный коттедж с 1 спальней с кроватью Qn + вид на океан, джакузи. Этот очень уединенный коттедж расположен в совершенно тихом месте на берегу океана.Наслаждайтесь романтическим отдыхом, отдохните в горячей ванне, разожгите уютный костер на открытом воздухе и насладитесь захватывающими закатами.
Удобно расположенный, мы находимся в 20 минутах от Кларенвилля и горнолыжного курорта Уайт-Хиллз, в 30 минутах от парка Терра Нова и гольф-курорта. Мы также на пути к тропе Скервинк в Порт-Рекстон и живописной Бонависте.
Железнодорожное полотно также очень доступно из отеля. Получите количество места, которое подходит именно вам Дома Комфортные места со всем необходимым Отели Стильные номера и удобства Уникальное проживание Пространства, которые больше, чем просто место для сна Seven Hills Subdivision Dallas GA
Подтип недвижимости современных фермерских домов на продажу в Техасе | 5 350 Современные фермерские дома на продажу в Техасе
Современный фермерский дом — это новый взгляд на классический стиль фермерского дома, добавляющий плавные линии, глянцевую отделку и более монохромные цветовые схемы поверх оригинального удобного, практичного и непринужденного стиля. Он сочетает в себе старое и новое, менее простоват, более изыскан и включает в себя современные элементы, такие как приборы из нержавеющей стали, мраморные столешницы, гладкое освещение и элементы индустриального стиля.
Этот стиль дома теплый, уютный и доступный. Он простой, но универсальный, и его владелец может сделать его совершенно уникальным.Сочетание современного и традиционного означает, что потребности современной жизни удовлетворены, но при этом сохраняется классический характер фермерского дома. Отделение № 7, п. D Сезонная аренда и дома — Канада
Division No. 7, Subd. D Аренда квартир и домов для отпуска — Канада | AirbnbПропустить к содержанию Лучшая аренда на время отпуска в Division No.7, Subd. D
Аренда на время отпуска для любого стиля
Популярные удобства для Дивизиона No.7, Subd. D Аренда на время отпуска
Другая отличная аренда на время отпуска в Подразделении № 7, Subd. D
- Коттедж целиком
- · Glovertown
The Sailor’s Rest
R2 306 ZAR за ночь
R2 306 ZAR за ночь- Бунгало целиком
- · Eastport
14000 Пляж ZAR / ночь
R2 885 ZAR за ночь- Вся каюта
- · Terra Nova
Популярная Terra Nova.Поход / гольф / рыба / плавание / каяк
R2 317 ZAR / ночь
R2 317 ZAR за ночь- Шале целиком
- · Clarenville
Thorburn Lake Retreat
R3 641 ZAR / ночь
3641 RR ZAR за ночьSEAsonal Delight. Наслаждайтесь каждым днем у залива.
R1,912 ZAR / ночь
R1912 ZAR за ночьДом для отпуска на берегу моря
R1,506 ZAR / ночь
R1,506 ZAR за ночьДом у океана, Salvage, NL
R1,539 ZAR / ночь
1 539 южноафриканских рандов за ночь- Бунгало целиком
- · Истпорт
The Beach House — Sandy Cove
1804 южноафриканских ранда за ночь
1804 южноафриканских ранда за ночь- Коттедж целиком
- · Торберн-Лейк 9
R4,055 ZAR / ночь
R4,055 ZAR за ночьДобро пожаловать в усадьбу шкипера Джеда!
R1,738 ZAR / ночь
R1,738 ZAR за ночь- Коттедж целиком
- · Южный залив
Коттедж Mayo
R2 317 ZAR / ночь
R2 317 ZAR за ночь- Дом полностью
- · Порт-Блэндфорд
Роскошный дом на берегу океана на гольф-курорте
3,232 ZAR / ночь
R3,232 ZAR за ночьБлижайшие направления
Гранд-Фолс-Виндзор123 км © 2021 Airbnb, Inc.Все права защищены.Subdivision Surfaces and Displacement Mapping
Две стандартные функции, которые поддерживает каждый современный производственный рендерер, — это поверхности подразделения и некоторая форма отображения смещения. Как мы обсудим чуть позже в этом посте, эти две функции обычно очень тесно связаны друг с другом как при использовании, так и при реализации. Подразделение и смещение — важные инструменты для представления деталей в компьютерной графике; Как с технической точки зрения, так и с точки зрения авторства, возможность представить больше деталей, чем на самом деле присутствует в сетке, является преимуществом.Применение деталей во время выполнения позволяет геометрии занимать меньше места на диске и памяти, чем это потребовалось бы, если бы все детали были встроены в геометрию, и художникам часто нравится возможность отделить широкие особенности от высокочастотных деталей.
Недавно я добавил в Takua поддержку поверхностей подразделения, а также скалярного и векторного смещения; На рисунке 1 показано, что океанская волна была визуализирована с использованием векторного смещения в Takua. Поверхность океана полностью смещена с одной плоскости!
Как subdivision, так и displacement изначально пришли из мира рендеринга растеризации, где создание геометрии на лету исторически было проще в реализации и более практичным / правдоподобным в использовании.При растеризации геометрия передается через модуль рендеринга и выводится на экран, поэтому каждая отдельная часть геометрии может быть разделена, разбита на мозаику, смещена, помещена в буфер кадра, а затем отброшена для освобождения памяти. Старый REYES Renderman был известен своей эффективностью при рендеринге поверхностей подразделения и поверхностей смещения именно по этой причине. Однако при наивной трассировке лучей лучи могут пересекать геометрию в любой момент в любом порядке. Разделение и смещение геометрии на лету для каждого луча с последующим отбрасыванием геометрии безумно дорого по сравнению с обработкой геометрии один раз во всем буфере кадра.Самое простое решение этой проблемы — просто разделить и сместить все на передний план и сохранить все это в памяти во время трассировки лучей. Однако исторически сложилось так, что простое кэширование всего никогда не было практическим решением, поскольку у компьютеров просто не было достаточно памяти для хранения такого количества данных. В результате в прошлых исследованиях были предприняты значительные усилия по созданию более интеллектуальных архитектур трассировки лучей, которые сделали оперативное подразделение / смещение снова доступным; к заметным достижениям относятся кэширование геометрии для трассировки лучей [Pharr and Hanrahan 1996], прямая трассировка лучей отображенных со смещением треугольников [Smits et al.2000], переупорядочил трассировку лучей [Hanika et al. 2010] и векторное смещение с трассировкой лучей на GPU [Harada 2015].
Тем не менее, за последние пять лет история о смещении с трассировкой лучей изменилась. Теперь у нас есть машины с большими и большими объемами памяти (в ряде студий узлы рендеринга с 256 ГБ памяти или более уже не являются чем-то необычным). В результате рендерерам с трассировкой лучей больше не нужно быть столь же умными в управлении смещенной геометрией; Комбинация адаптивной тесселяции к камере и простого геометрического кеша с наименее использованной стратегией вытеснения часто бывает достаточно для практического применения смещения с трассировкой лучей.Сильное смещение теперь является обычным явлением в рабочих процессах для ряда производственных программ отслеживания путей, включая Arnold, Renderman / RIS, Vray, Corona, Hyperion, Manuka и т. Имея в виду вышеизложенное, я попытался реализовать subdivision и displacement в Takua как можно проще.
Takua не имеет концепции стратегии удаления кэшированной мозаичной геометрии; надежда состоит в том, чтобы просто уместиться в памяти и максимально эффективно использовать имеющуюся память. По общему признанию, поскольку Takua — это просто мой хобби-рендерер, а не полностью используемый производственный рендерер, и у меня есть персональные машины с 48 ГБ памяти, я не особо задумывался о случаях, когда что-то не умещается в памяти.Вместо тесселяции на лету для каждого луча или чего-то подобного, я просто предварительно делю и смещаю все заранее во время начальной загрузки сцены. Сетки загружаются, разделяются и смещаются параллельно друг другу. Если Такуа обнаруживает, что вся разделенная и смещенная геометрия не умещается в выделенном бюджете памяти, средство визуализации просто завершает работу.
Я должен отметить, что формат сцены Такуа различает меш и геометрию; сетка — это необработанные данные вершин / граней / примваров, составляющие поверхность, а геометрия — это объект, содержащий ссылку на сетку вместе с матрицами преобразования, привязками шейдеров и т. д. и т. д.Это разделение между данными сетки и геометрическим объектом позволяет использовать некоторые полезные функции в системе подразделения / смещения. Формат файла сцены Takua позволяет связывать модификаторы subdivision и displacement либо на уровне шейдера, либо для каждой геометрии. Привязки на уровне геометрии переопределяют привязки на уровне шейдера, что полезно для разработки, поскольку целый набор объектов может совместно использовать один и тот же шейдер, но затем иметь индивидуальную специализацию для разных скоростей подразделения и разных карт смещения и настроек смещения.Во время загрузки сцены Takua анализирует, какие подразделения / смещения требуются для каких сеток и по какой геометрии, а затем дедуплицирует и объединяет любые случаи, когда разные геометрии хотят одно и то же подразделение / смещение для одной и той же сетки. Это дедупликация работает даже для экземпляров (когда-нибудь я должен написать отдельный пост о подходе Такуа к созданию экземпляров…).
После того, как Takua составил список всех сеток, требующих подразделения, сетки разделяются параллельно. Что касается подразделения Catmull-Clark [Catmull and Clark 1978], я полагаюсь на OpenSubdiv для расчета таблиц шаблонов подразделений [Halstead et al.1993] для адаптивного подразделения функций [Nießner et al. 2012], оценка трафаретов и окончательная мозаика. Насколько я могу судить, расчет трафарета в OpenSubdiv является однопоточным, поэтому на действительно тяжелых сетках он может работать довольно медленно. Однако оценка трафарета и окончательная тесселяция выполняются очень быстро, поскольку OpenSubdiv предоставляет ряд параллельных оценщиков, которые могут работать с использованием различных бэкэндов, от TBB на ЦП до вычислительных шейдеров CUDA или OpenGL на графическом процессоре. Takua в настоящее время полагается на оценщик TBB OpenSubdiv.Одна из замечательных особенностей реализации трафарета в OpenSubdiv заключается в том, что вычисление трафарета зависит только от топологии меша, а не от отдельных примваров, поэтому одно вычисление трафарета можно затем повторно использовать несколько раз для интерполяции множества различных примваров, таких как позиции, нормали, УФ и др. В настоящее время Takua не поддерживает складки; Я планирую добавить поддержку складок позже.
Ни одно описание поверхностей подразделения не будет полным без изображения куба, разделенного на сферу, поэтому на рисунке 2 показан рендер куба с уровнями подразделения 0, 1, 2 и 3, идущий слева направо.Каждый разделенный куб визуализируется с помощью процедурной каркасной текстуры, которую я реализовал, чтобы помочь визуализировать то, что происходило с подразделением.
Каждая разделенная сетка помещается в новую сетку; базовые сетки, требующие нескольких уровней подразделения для нескольких различных геометрий, получают по одной новой разделенной сетке на каждый уровень подразделения. После того, как все разделенные сетки готовы, Такуа запускает смещение. Смещение распараллеливается как по сетке, так и внутри каждой сетки. Кроме того, Takua поддерживает как смещение на лету, так и полностью кэшированное смещение, которое можно указать для каждого шейдера или геометрии.Если сетка помечена для полного кэширования, она полностью смещается, сохраняется как отдельная сетка от несмещенной сетки подразделения, а затем для смещенной сетки создается BVH. Если сетка помечена для смещения «на лету», система смещения вычисляет каждую смещенную грань, затем вычисляет границы для этой грани, а затем отбрасывает грань. Затем смещенные границы используются для построения плотной BVH для смещенной сетки без фактического сохранения самой смещенной сетки; вместо этого должна быть сохранена просто ссылка на несмещенную сетку подразделения.Когда луч пересекает BVH для сетки смещения «на лету», каждый листовой узел BVH указывает, какие треугольники на несмещенной сетке необходимо смещать, чтобы получить окончательные многоугольники для пересечения, а затем смещенные многоугольники пересекаются и снова отбрасываются. Для сцен в этом посте смещение на лету кажется примерно в два раза медленнее, чем полностью кэшированное смещение, чего и следовало ожидать, но если одна и та же сетка смещается несколькими разными способами, то соответственно достигается большая экономия памяти.После того, как все смещения были рассчитаны, Такуа возвращается и анализирует, какие базовые сетки и несмещенные сетки подразделения больше не нужны, и освобождает эти сетки для освобождения памяти.
Я реализовал поддержку как скалярного смещения с помощью обычных текстурных карт в градациях серого, так и векторного смещения из текстур OpenEXR. В рендере океана из начала этого поста используется векторное смещение, примененное к одной плоскости. На рисунке 3 показан другой угол того же вектора смещенного океана:
Для обоих рендеров океана текстура OpenEXR с векторным смещением заимствована у Autodesk, которая щедро предоставляет ее как часть статьи о векторном смещении в Arnold.Рендеры освещены куполом неба с использованием текстуры HDRI Sky 193 на сайте hdri-skies.com.
Как для скалярного, так и для векторного смещения, величина смещения из текстуры смещения может управляться одним скалярным значением. Предполагается, что векторные карты смещения находятся в локальном касательном пространстве; какая ось используется в качестве основы касательного пространства, может быть указана для каждой карты смещения. На рисунке 4 показаны три шейдерных шара грязи с различными значениями масштабирования смещения. Крайний левый шейдерный шар имеет масштаб смещения 0, что эффективно отключает смещение.Средний шейдерный шар имеет масштаб смещения 0,5 от собственных значений смещения в векторной карте смещения. Крайний правый шейдерный шар имеет масштаб смещения 1.0, что означает просто использовать собственные значения смещения из векторной карты смещения.
На рис. 5 крупным планом показан крайний правый шейдерный шар грязи с рис. 4. Базовая сетка для шейдерного шара имеет относительно низкое разрешение, но с помощью подразделения и смещения можно добавить огромное количество геометрических деталей во время рендеринга.В этом случае шейдерный шар тесселируется до точки, в которой каждый отдельный микрополигон имеет размер субпикселя. Модель для шейдербола основана на шейдерном шаре Бертрана Бенуа. Карта смещения и другие текстуры для шейдеров грязи взяты из библиотеки Quixel Megascans.
Одна из основных проблем с отображением смещения — это растрескивание. Растрескивание происходит, когда смежные полигоны смещают одни и те же общие вершины по-разному для каждого полигона. Это может произойти, когда нормали на поверхности не являются непрерывными, или если есть разрыв в том, как текстура смещения отображается на поверхность, или в самой текстуре смещения.Я реализовал необязательное, несколько грубое решение для взлома смещения. Если включено удаление трещин, Takua анализирует сетку во время смещения и записывает, сколько разных способов смещения каждой вершины в сетке разными гранями, а также какие грани хотят сместить эту вершину. После начального прохода смещения средство для удаления трещин затем возвращается, и для каждой вершины, которая смещается более чем в одну сторону, все смещения усредняются в одно смещение, и все грани, которые используют эту вершину, обновляются для получения одного и того же усредненного результата. .Этот подход требует изрядного количества учета и предварительного анализа смещенной сетки, но, похоже, он работает хорошо. На рисунке 6 показаны два куба с геометрическими нормалями, назначенными каждой грани. Два куба перемещаются с использованием того же шаблона смещения шахматной доски, но для куба слева отключено удаление трещин, а для куба справа включено удаление трещин:
В большинстве случаев кажется, что система удаления трещин работает очень хорошо. Однако система несовершенна; иногда могут появляться артефакты растяжения, особенно на поверхностях с текстурированным основным цветом.Это растяжение происходит потому, что система удаления трещин в основном растягивает микрополигоны, чтобы покрыть трещину. Это растяжение текстуры можно увидеть в некоторых частях шейдерных шаров на рисунках 5, 7 и 8 в этом посте.
Takua автоматически пересчитывает нормали для разделенных / смещенных полигонов. По умолчанию Takua просто использует геометрическую нормаль как штриховку для смещенных полигонов; однако существует возможность вычислить гладкие нормали и для нормалей затенения. Я решил использовать геометрические нормали по умолчанию с надеждой, что для субпиксельного разделения и смещения другая нормаль затенения не понадобится.
В будущем я, возможно, решу реализовать свою собственную библиотеку подразделений, и мне, вероятно, также следует подумать о каком-то подходящем комбинированном кэше тесселяции и стратегии вытеснения для повышения эффективности памяти. На данный момент, однако, кажется, что все работает хорошо и отображается относительно эффективно; Все рендеры, не относящиеся к океану, в этом посте имеют субпиксельное подразделение с миллионами полигонов, и каждый рендеринг с разрешением 4K (3840×2160) на машине с двумя процессорами Intel Xeon X5675 (всего 12 ядер) занимал несколько часов.Два океанских рендера, которые я позволил запустить на ночь с разрешением 1080p; им потребовалось больше времени, чтобы сходиться в основном из-за глубины резкости. Все рендеры в этом посте были закрашены с использованием новой, значительно улучшенной системы затенения, о которой я напишу позже. Такуа теперь может отображать намного больше сложности, чем раньше!
В заключение, я визуализировал еще несколько шейдерных шариков, используя различные карты смещения из библиотеки Megascans, показанные на рисунках 7 и 8.
Список литературы
Эдвин Э.Катмулл и Джеймс Х. Кларк. 1978. Рекурсивно генерируемые B-сплайновые поверхности на произвольных топологических сетках. Компьютерное проектирование . 10, 6 (1978), 350-355.
Марк Холстед, Майкл Касс и Тони ДеРоуз. 1993. Эффективная, справедливая интерполяция с использованием поверхностей Катмулла-Кларка. В SIGGRAPH 1993: Материалы 20-й ежегодной конференции по компьютерной графике и интерактивным методам . 35-44.
Йоханнес Ханика, Александр Келлер и Хендрик П. А. Ленш. 2010 г.Двухуровневая трассировка лучей с переупорядочиванием для очень сложных сцен. В GI 2010 (Материалы конференции 2010 г. по графическим интерфейсам) . 145-152.
Такахиро Харада. 2015. Визуализация отображенных поверхностей с векторным смещением в трассировщике лучей на графическом процессоре. В GPU Pro 6 . 459-474.
Матиас Нисснер, Чарльз Луп, Марк Мейер и Тони ДеРоуз. 2012. Функция адаптивного рендеринга с помощью графического процессора поверхностей подразделения Катмулла-Кларка. Транзакции ACM с графикой . 31, 1 (2012), 6: 1-6: 11.
Мэтт Фарр и Пэт Ханрахан. 1996. Кэширование геометрии для карт смещения с трассировкой лучей. В Методы рендеринга 1996 (Труды 7-го семинара Еврографики по рендерингу) . 31-40.
Брайан Смитс, Питер Ширли и Майкл М. Старк. 2000. Прямая трассировка лучей отображаемых смещений треугольников. В Методы рендеринга 2000 (Труды 11-го семинара Еврографики по рендерингу) . 307-318.
.