<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://lib.custis.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%B0%D0%BA%D1%81%D0%B8%D0%BC_%D0%A6%D0%B5%D0%BF%D0%BA%D0%BE%D0%B2_-_%D0%BE%D1%82%D1%87%D0%B5%D1%82_%D0%BE%D0%B1_ADD-2011%2FMongoDB</id>
		<title>Максим Цепков - отчет об ADD-2011/MongoDB - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://lib.custis.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%B0%D0%BA%D1%81%D0%B8%D0%BC_%D0%A6%D0%B5%D0%BF%D0%BA%D0%BE%D0%B2_-_%D0%BE%D1%82%D1%87%D0%B5%D1%82_%D0%BE%D0%B1_ADD-2011%2FMongoDB"/>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9C%D0%B0%D0%BA%D1%81%D0%B8%D0%BC_%D0%A6%D0%B5%D0%BF%D0%BA%D0%BE%D0%B2_-_%D0%BE%D1%82%D1%87%D0%B5%D1%82_%D0%BE%D0%B1_ADD-2011/MongoDB&amp;action=history"/>
		<updated>2026-04-13T01:01:57Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%9C%D0%B0%D0%BA%D1%81%D0%B8%D0%BC_%D0%A6%D0%B5%D0%BF%D0%BA%D0%BE%D0%B2_-_%D0%BE%D1%82%D1%87%D0%B5%D1%82_%D0%BE%D0%B1_ADD-2011/MongoDB&amp;diff=25878&amp;oldid=prev</id>
		<title>StasFomin: Новая страница: «* MongoDB (Сергей Туленцев, ADD-2011)  Слушал не с начала. Мой интерес к этой теме — представлять ...»</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%9C%D0%B0%D0%BA%D1%81%D0%B8%D0%BC_%D0%A6%D0%B5%D0%BF%D0%BA%D0%BE%D0%B2_-_%D0%BE%D1%82%D1%87%D0%B5%D1%82_%D0%BE%D0%B1_ADD-2011/MongoDB&amp;diff=25878&amp;oldid=prev"/>
				<updated>2011-05-17T12:27:33Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «* &lt;a href=&quot;/MongoDB_(%D0%A1%D0%B5%D1%80%D0%B3%D0%B5%D0%B9_%D0%A2%D1%83%D0%BB%D0%B5%D0%BD%D1%86%D0%B5%D0%B2,_ADD-2011)&quot; title=&quot;MongoDB (Сергей Туленцев, ADD-2011)&quot;&gt;MongoDB (Сергей Туленцев, ADD-2011)&lt;/a&gt;  Слушал не с начала. Мой интерес к этой теме — представлять ...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;* [[MongoDB (Сергей Туленцев, ADD-2011)]]&lt;br /&gt;
&lt;br /&gt;
Слушал не с начала. Мой интерес к этой теме — представлять уровень развития NoSQL баз данных, их назначение — с тем, чтобы, возможно, начать применять в проектах. В общем, не секрет, что собственно реляционные возможности в реляционной базе данных во многих проектах используются ограниченно. Но их выбирают из-за высокого быстродействия в целом, а также из-за развитых механизмов управления транзакциями, резервного копирования, восстановления, репликаций. И NoSQL базы данных, обеспечив преимущество по скорости за счет своей более простотой организации сейчас наполняются теми механизмами, которые в реляционных БД, например, в Oracle — есть. Уровень зрелости сложно оценить по книгам, тут удобнее доклады тех людей, которые реально используют в своих проектах.&lt;br /&gt;
&lt;br /&gt;
MongoDB очень удобно для прототипирования. Обеспечивает изменение структуры на лету. А еще можно использовать для динамических данных, настраиваемых при конфигурировании продукта. Например, сайт с опросами или CMS. По его оценке сайт для опросов — пара таблиц и 1200 строк, с mysql будет больше.&lt;br /&gt;
&lt;br /&gt;
Очень быстрый доступ по keyvalue. Но не только так — есть 15-20 операций чтобы строить запросы, включая существование элемента в массиве, соответствие всех элементов заданному множеству и т.п. Для конкурентной работы — команда find and modify — документ ищем и сразу меняем, что задано. База данных — кластерная. И в кластер сразу заложено, что есть мастер и дубль, который в случае чего подхватит. А еще есть журнал и лог транзакций — на случай падения. Из инструментов отладки — встроенный профилятор, плюс логирование запросов. К сожалению, есть ограничение — 16М на документ.&lt;br /&gt;
&lt;br /&gt;
При проектирвоании важно правильно расшарить данные, это ключ к масштабированию. Shard key — идентифицирует данные в кластере, он не изменяется — только копирование, а если для коллекции — надо сохранить на диск и загрузить, только так. Пример — user по email. Другой пример — пусть есть ленты пользователей. Можно расшаривать по постам (событиям). А можно — по пользователям. В первом случае лента — распределенная, запрос ленты пользователя пойдет на много серверов. А при падении сервера получается лента с дырками. Во втором случае — вся лента с одного сервера, это эффективно по нагрузке. При проблемах — система не работает с одного сервера. Еще пример с фотками. timestamp в ключе фотки приведет к тому, что все фотографии, загруженные в один момент времени, ложаится в один кластер — не эффективно, потому лучше timestamp+user или timestamp+hash.&lt;br /&gt;
&lt;br /&gt;
Наращиваются механизмы фоновой оптимизации. Например, балансировка чанков в фоновом режиме. Был интересный пример, как сжать таблицу без остановки — включаем вторую ноду-реплику, перелдиваем, сжимаем, переливаем изменения мастера, мастер выключаем.&lt;br /&gt;
 &lt;br /&gt;
Рекомендации по быстродействию — в целом понятные, известные и по реляционным базам данных.&lt;br /&gt;
* Когда делаете начальный импорт, лучше заранее сделать нужное количество чанков — чтобы это не делать в динамике на импорте.&lt;br /&gt;
* Cached Counter. Атрибуты-массивы, но нет операции, выдающей длину. Патерн — храним с каждым списокм counter.&lt;br /&gt;
* Covered index — чтобы быстро получать данные из индекса.&lt;br /&gt;
* специальные индексы — для более быстрого доступа именно к последним данным.&lt;br /&gt;
* Держать часть документов (временные) только в памяти.&lt;br /&gt;
* Индексация документов при записи: больше индексов — медленнее.&lt;br /&gt;
&lt;br /&gt;
Интересно, что бывает использование совсем не по назначению — просто Server side jscript…&lt;/div&gt;</summary>
		<author><name>StasFomin</name></author>	</entry>

	</feed>