UTP - Выпуск 4

Umputun

UTP - Технический Подкаст от Umputun

UTP - Выпуск 4

UTP - Технический Подкаст от Umputun

Добрый день. 7 мая 2010 года. Четвертый выпуск технического подкаста от Умпутуна.

Good afternoon. May 7, 2010. The fourth episode of the technical podcast from Umpotun.

И сегодня мы поговорим на тему новую SQL и немножко подробнее про MongoDB.

And today we will talk about the new SQL and a little more about MongoDB.

Сегодня я несколько отойду от своих традиций, которые уже успели за три выпуска устояться.

Today I will somewhat deviate from my traditions, which have already solidified over three issues.

Не говорить элементарно и не разводить воды.

Do not talk in elementary terms and do not beat around the bush.

Ну так, например, когда у нас была серия выпусков про системы контроля ревизий,

Well, for example, when we had a series of releases about audit control systems,

системы контроля версий, я вовсе не начинал рассказывать вам, чего это такое.

version control systems, I didn’t even start telling you what it is.

Мне казалось, и сейчас кажется, что системы контроля, в общем, дело понятное каждому,

It seemed to me, and still seems, that control systems are, in general, a matter understandable to everyone.

каждому из тех, кто слушает этот подкаст.

to each of those who listens to this podcast.

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

But the situation is very different if we start a conversation about some new and potentially unknown area for many.

Для меня эта область была тоже неизвестна довольно долго,

This area was also unknown to me for quite a long time.

и где-то несколько месяцев назад я совершенно случайно,

and somewhere a few months ago I accidentally,

ходя по исследованиям всех базвордов,

walking through the research of all buzzwords,

наверное, в процессе подготовки к радио УТИ впервые столкнулся плотно с термином,

probably, during the preparation for the radio, UTI first encountered the term closely,

который за последние месяцы стал оглушающим во всех средствах интернетовской информации NoSQL.

which has become deafening in all means of internet information about NoSQL over the past few months.

Итак, что за такое странное слово и такая странная концепция, построенная на отрицании?

So, what is this strange word and such a strange concept built on denial?

Ну, NoSQL, не SQL.

Well, NoSQL, not SQL.

То есть как SQL, только наоборот, судя по названию.

So, like SQL, only backwards, judging by the name.

В сущности, под этим словом...

Essentially, under this word...

В сущности, под этим словом не подразумевается никакой конкретный продукт.

Essentially, this word does not imply any specific product.

И если вы поищите по этому ключевому слову в Гугле, найдете много общих таких сайтов,

And if you search for this keyword on Google, you will find many similar websites.

в котором перечислены единицы, а уже, наверное, десятки различных систем,

in which units are listed, and already, probably, dozens of different systems,

как встраиваемых, так и внешних, как слабеньких, совсем-таки более интересных,

both embedded and external, both weak and quite interesting.

и все они вот этим самым термином себя обзывают.

and they all refer to themselves with this very term.

В общем-то, речь идет о хранилище данных.

Basically, it's about a data storage.

Хранилище данных, которое не является совместимым системой,

A data storage that is not compatible with the system.

с тем, что вы привыкли считать революционными базами данных,

with what you have come to consider revolutionary databases,

совместимым в смысле логики и в смысле работы с ними.

compatible in terms of logic and in terms of working with them.

Это не такие хранилища, не такие системы, которые можно тем способом,

These are not such storages, not such systems that can be handled that way,

который вы привыкли использовать в своем любимом MySQL, MSSQL, Oracle, Sybase,

that you are used to using in your favorite MySQL, MSSQL, Oracle, Sybase.

в той большой базе, которую вы пользуете, или небольшой даже.

in that large database that you are using, or even a small one.

Встроенные базы многие являются SQL похожими,

Many built-in databases are SQL-like.

а это SQL не похожая база данных.

This is a non-SQL database.

И вот от этого...

And here's from this...

Тут многие названия.

There are many names here.

Но давайте о более важном, собственно, что это должно решить,

But let's talk about something more important, what exactly should this solve,

и почему это нам должно быть с вами интересно.

And why should this be interesting for us?

Нам с вами, как специалистам-практикам,

As specialists in practice, we...

может, некоторым из моих слушателей, как специалистам-теоретикам,

maybe some of my listeners, as theoretical specialists,

интересна и важна проблема представления данных, сохранения данных

The issue of data representation and data preservation is interesting and important.

и работы с этими данными на аппликационном уровне.

and work with this data at the application level.

У каждой программы, так сказать, в вашем домене, в вашем списке интересов,

Each program, so to speak, in your domain, in your list of interests,

является какой-то набор.

is some kind of set.

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

Objects, records, and the connections between them that you would like to preserve.

Традиционный способ использования для сохранения информации,

The traditional way of using it to preserve information,

любой информации, которую вы не можете, не хотите,

any information that you cannot or do not want to

или просто физически невозможно разместить в рамках вашей абстракции,

or it is simply physically impossible to fit within your abstraction,

которая, как матрешка, помещается в рамки вашей программы,

which, like a matryoshka, fits within the frames of your program,

так вот все это, что не помещается в вашу абстракцию,

so all of this that doesn't fit into your abstraction,

и конкретную комплементацию, идет в базу данных.

and the specific complementation goes into the database.

Оттуда достается.

It gets taken from there.

Ну, вы не маленькие, знаете.

Well, you're not little, you know.

Делайте таблички.

Make signs.

Пишите запрос, ну, или используйте какую-нибудь продвинутую ORM-прослойку

Write a query, or use some kind of advanced ORM layer.

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

in order to hide all this pettiness of the database from your application.

Низость, я имею в виду относительно низкий уровень представления.

Meanness, I mean a relatively low level of representation.

Теоретически, для предоставления такого сториджа,

Theoretically, to provide such storage,

такого запоминала для вашей программы,

I remembered this for your program,

вовсе не обязательно использовать какой-то внешний продукт.

It is not necessary at all to use any external product.

В самом элементарном случае, это может быть какой-то ваш личный файл

In the most basic case, it could be some personal file of yours.

в вашем личном формате, который вы придумали,

in your personal format that you came up with,

и вы пишете.

and you are writing.

Вы пишете туда спокойно, и спокойно оттуда читаете.

You write there calmly, and you read from there calmly.

У решения этого, как у всякого велосипеда, есть масса проблем.

Like any bicycle, this solution has a lot of problems.

Ну, например, как только вам недостаточно уже прямого чтения,

Well, for example, as soon as you find direct reading no longer sufficient,

вам необходимо придумывать свою систему индексирования.

You need to come up with your own indexing system.

И если вам недостаточно программы,

And if the program is not enough for you,

вот этой системы для вашей программы, сделанной на коленке,

of this system for your program, made on the fly,

которую придется расширять и менять вместе с изменением вашей программы,

which will need to be expanded and changed along with the changes in your program,

вам тоже придется как-то задумываться над стандартами, над расширяемостью.

You will also have to think about standards and extensibility.

Я уж не говорю, если вам

I'm not even saying, if you...

необходимо систему масштабировать или придумывать кластер

It is necessary to scale the system or come up with a cluster.

в ту или иную сторону, или систему бесперебойной работы,

in one direction or another, or a system of uninterrupted operation,

тоже много чего придется продумать и сделать самому руками,

There will also be a lot to think through and do myself by hand.

и это обидно.

and it is offensive.

И это даже не только обидно, но и досадно,

And it's not just offensive, but also annoying,

потому что массу проблем вы будете решать,

because you will be solving a lot of problems,

и, наверное, многие из моих слушателей решали и решают,

and perhaps many of my listeners have decided and are deciding,

которые теоретически кто-то другой же мог решить.

which theoretically someone else could have solved.

Я уж не говорю о эффективности, а о скорости.

I'm not even talking about efficiency, but about speed.

То есть решение, сделанное вами для сохранения

That is, the decision made by you to preserve.

данных, оно может быть, конечно, и быстрым в вашем конкретном случае,

data, it may, of course, be fast in your specific case,

потому что как раз практика показывает, что конкретные решения

because practice shows that specific solutions

иногда удается сделать гораздо более оптимально,

sometimes it is possible to do it much more optimally,

чем более-менее общие решения.

the more or less general solutions.

Но, тем не менее, проблемой этой надо заниматься.

But, nevertheless, this problem needs to be addressed.

Про проблему расширяемости я уже сказал, и все вот эти проблемы,

I've already mentioned the issue of scalability, and all these problems,

которые вы бы делали, решения которых вы бы, наверное, хотели делать руками,

which you would do, decisions you would probably like to make with your hands,

они, как вы видите, не очень укладываются в стандартную базу.

They, as you can see, don't quite fit into the standard database.

Ну, то есть,

Well, that is,

теоретически, практически можно придумать базу, таблицы со всеми уровнями

Theoretically, it is practically possible to come up with a database, tables with all levels.

нормализации и все хранить в реляционной базе.

normalization and store everything in a relational database.

Но при этом возникает, на мой взгляд, чудовищные сложности,

But at the same time, in my opinion, monstrous difficulties arise,

не сложности, а даже неприятности, проблема фрагментации концепции

not difficulties, but even troubles, the problem of concept fragmentation

и разрыва даже этой концепции.

and the rupture of even this concept.

То есть представление ваших данных в хранилище вообще никаким образом

That is, the representation of your data in the storage in no way...

не относится к тому, как ваша программа, ваша система с этими данными работает.

does not relate to how your program, your system works with this data.

Есть какой-то стандартный способ сохранения данных, есть стандартный способ доступа к данным,

There is some standard way of storing data, there is a standard way of accessing data,

а все остальные более высокого уровня навороты обеспечиваются какими-то специальными фреймворками

But all the other higher-level features are provided by some special frameworks.

или другими общими или специализированными решениями.

or other general or specialized solutions.

Теоретически, хотелось бы иметь такое хранилище, которое к вашей концепции подходило бы как нельзя плотнее,

Theoretically, I would like to have a storage that fits your concept as closely as possible.

ну, или во всяком случае не заставляло вас делать то, что вам кажется странным.

Well, at least it didn't make you do things that seem strange to you.

Мне, например, нормализовать данные всегда казалось,

For me, normalizing data has always seemed like a good idea,

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

both strange and in many situations using relational databases like MySQL from all points of view

я совершенно намеренно и осознанно производил полную деморализацию, денормализацию данных

I deliberately and consciously carried out complete demoralization and denormalization of the data.

и представлял их практически в той форме, в которой принято представлять данные в NoSQL базах.

and presented them almost in the form that is typically used to present data in NoSQL databases.

Но мы об этом чуть ниже поподробнее поговорим.

But we will talk about this in a bit more detail a little lower.

Кроме этого самого разрыва концепции, есть еще некая проблема доступа к данным,

In addition to this very gap in the concept, there is also a problem with data access.

и сохранение логики.

and preserving the logic.

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

I want to talk about a familiar phenomenon when collecting data in pieces from a relational database,

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

I again understand that there are all sorts of high-level things,

и можно на уровне драйвера, на уровне ваших собственных оболочек и обверток что-то красивое придумать,

"and you can come up with something beautiful at the driver level, at the level of your own shells and wrappers,"

но говорю я о прямом и классическом случае использования SQL-запросов для того,

but I am talking about the direct and classic case of using SQL queries to

чтобы взять данные из SQL-подобной базы данных.

to retrieve data from a SQL-like database.

Так вот, мало того, что логика представления данных странна,

So, not only is the logic of data presentation strange,

не то что страна, другая, не такая, как ваша аппликация ожидает и не такая, как из нее следует,

not that the country, another one, not like your application expects and not like it follows from it,

но и логика доступа потом к этим данным вовсе не более прозрачна.

But the logic of access to this data is by no means more transparent.

Есть проблема скорости, о которой мы говорили,

There is a speed issue that we talked about,

проблема скорости как в наколенчатых решениях, так и в решениях реляционных баз данных,

the speed issue exists in both knee-jerk solutions and relational database solutions.

и речь идет о скоростях в относительно нагруженных случаях,

and it concerns speeds in relatively loaded cases,

то есть если у вас база данных сидит за веб-сайтиком,

that is, if your database is sitting behind a website,

который приходит 2-3 запроса в секунду, может даже 10 запросов в секунду,

which receives 2-3 requests per second, or even 10 requests per second,

наверное, вам не о чем особо беспокоиться,

you probably don't have much to worry about,

однако если речь идет о системах, которым необходимо десятки тысяч запросов в секунду на апдейт

However, if it comes to systems that require tens of thousands of requests per second for updates.

и примерно такое же количество запросов на поиск, на доступ к данным,

and approximately the same number of requests for search, for access to data,

тут уже задуматься есть о чем.

There is already something to think about here.

Ну то есть тут и думать особенно нечего,

Well, there's really not much to think about here,

никакого стандарта,

no standard,

никакого стандартного решения в мире реляционных баз данных

no standard solution in the world of relational databases

за какие-то доступные деньги на каком-то ожидаемом и понятном железе

for some affordable money on some expected and understandable hardware

вы просто не найдете в этой вселенной, в которой мы с вами имеем счастье проживать.

you simply won't find in this universe, in which we have the happiness to live.

Несомненно, есть еще некая проблема общей сложности баз данных,

Undoubtedly, there is still a certain problem of general database complexity,

хотя, наверное, люди, которые специалисты по базам,

although, probably, people who are database specialists,

они поднимут меня на смех, что там сложного,

They will laugh at me, what's so difficult about that,

но факт совершенно медицинский,

but the fact is purely medical,

что, по сути, сопровождение баз данных, настройка, оптимизация,

what, in essence, is database maintenance, configuration, optimization,

это довольно тонкий процесс.

It's a rather delicate process.

Тонкий процесс, требующий особого знания

A delicate process that requires special knowledge.

и некие навыки, не особо сложные, я спорить не буду,

and some skills, not particularly complex, I won't argue.

но особые навыки, определенные вполне навыки,

but specific skills, defined quite clearly skills,

нужны программисту, который будет с базами работать,

needed for a programmer who will work with databases,

даже если он к славному делу разработки для баз данных никакого отношения не имеет.

even if he has nothing to do with the noble cause of database development.

И так, это такие основные проблемы и в принципе они понятны.

So, these are the main problems, and in general, they are understandable.

А есть еще одна проблема, я забыл ее упомянуть.

And there is one more problem, I forgot to mention it.

Из-за сложности баз данных и концептуальной, скорее, сложности транзакционных баз данных,

Due to the complexity of databases and, rather, the conceptual complexity of transactional databases,

у них бывают серьезные проблемы в смысле расширяемости,

they have serious problems in terms of scalability,

в смысле горизонтальной расширяемости,

in terms of horizontal scalability,

когда необходимо объединить ваших несколько серверов в кластер

when it is necessary to combine your several servers into a cluster

в той или иной степени устойчивости.

to some extent of stability.

Это делается, но делается порой через пин, через колоду.

This is done, but sometimes it is done through a pin, through a deck.

И в общем случае совершенно непростое,

And in general, it is quite complicated,

и нетривиальные действия и не зря я упоминал верху там по своему по своей линии разговора

and non-trivial actions, and it is not in vain that I mentioned above in my line of conversation.

на коленочные решения появление их в массе для различных задач так называемых хранилищ

"On knee-jerk solutions, their emergence in mass for various tasks of so-called repositories."

уровня задач она не новое явление и практически каждый программист в тот или иной момент своей

task level is not a new phenomenon, and almost every programmer at one time or another in their

карьеры сталкивался с тем что пишет себе какое-то не даже базы данных назвать нельзя какое-то

In his career, he encountered something that can't even be called a database, something.

хранилище с каким-то произвольным доступом с какой-то оптимизации под свои нужды и наверное

a storage with some random access optimized for its needs and probably

некоторые программисты при этом чесали репу а неужели нельзя сделать нечто такое которое не

Some programmers scratched their heads, isn't it possible to create something that doesn't?

будет с одной стороны являться реляционным монстром требующим свое и пожирающим своих

on one hand, it will be a relational monster demanding its own and devouring its own.

детей а с другой стороны будет вполне быстро просто и отвечать требованиям вашей программы

Children, on the other hand, will be quite quick and simple to meet the requirements of your program.

вот из всего из этого и выросли ноги того что сейчас

That's how everything grew into what it is now.

есть и выросли ноги того что сейчас

There are and have grown the legs of what is now.

называется новым скиллем движения на мой взгляд и опять же я тут не не то что гору

It's called a new movement skill in my opinion, and again, it's not that I'm claiming to be an expert.

который вещает вам прямую истину а всего лишь такой же профессионал какой который говорит

who broadcasts the absolute truth to you is just as much a professional as anyone else who speaks.

свои профессиональные и очень специальные наблюдения со своей очень особой точки зрения

your professional and very special observations from your very unique perspective

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

So, from my point of view, it is precisely the requirements that are relatively simple on one hand and universal.

с другой расширяемой и в то же время производительной системы хранения данных для

with another expandable and at the same time efficient data storage system for

возможностей

possibilities

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

Your applications have spawned this entire movement; I have long debated with Grandma about whether this can be called a database, but it's all just terminological disputes in the sense of what it means.

мск или мая сквели oracle является базой данных вы там все основные списки найдёте вики что что такое

MSK or my kvelli Oracle is a database where you will find all the main lists, wiki what is what.

реляционная база данных конечно новый скель и решения базами данных не являются но самая из них простой наверное самая старая чтобы хоть немножко поняли о чем я говорю

A relational database is of course a new concept, and solutions involving databases are not the most straightforward, but among them, the simplest is probably the oldest, just so you get a little bit of an idea of what I'm talking about.

И, наверное, по степени упрощения, элементарное, ну, не с точки зрения реализации, а с точки зрения концепции, это хранилище пар значения ключ, точнее говоря, ключ значения.

And probably, in terms of simplification, the elementary aspect, well, not from the point of view of implementation, but from the point of view of concept, is a storage of key-value pairs, or rather, key-value.

И самый его, наверное, известный представитель – это Amazon SimpleDB, например, Hadoop, Cassandra в каком-то смысле, в очень таком особо специальном смысле, хотя они себя называют Column-Oriented, базой данных Redis, насколько я знаю.

And probably its most famous representative is Amazon SimpleDB, for example, Hadoop, Cassandra in some sense, in a very particular sense, although they call themselves Column-Oriented, and the Redis database, as far as I know.

Вот это все в сторону хранения и доступа к значениям, которые адресуются по ключам.

This is all about storage and access to values that are addressed by keys.

Программисты могут себе представить какой-нибудь мэп и представить, что этот мэп у них…

Programmers can imagine some kind of map and picture that this map is with them...

…сохранен на диске, на дисках в облаке.

...saved on a disk, on disks in the cloud.

Вот примерно получится Key-Value Storage.

This will roughly result in a Key-Value Storage.

И, естественно, из Key-Value можно собрать чего угодно.

And, of course, you can assemble anything from Key-Value.

Просто затраты на сбор и на представление данных в форме Key-Value тоже не элементарная задача и немножко не отвечает, на мой взгляд, немножко не отвечает требованию иметь представление данных,

The costs of collecting and presenting data in a Key-Value format are also not a trivial task and, in my opinion, do not quite meet the requirement of having a data representation.

которое более-менее точно отражает концепцию и суть данных.

which more or less accurately reflects the concept and essence of the data.

В этом смысле, с этой точки зрения, документ-ориентированная база данных, из которых две самые известные – это MongoDB и CouchDB – это, наверное, ближе к концепции.

In this sense, from this point of view, document-oriented databases, the two most well-known being MongoDB and CouchDB, are probably closer to the concept.

Здесь под документом понимается некий документ, довольно формальный, на каком-то формальном языке описанный, который представляется, по сути, набор ключей и значений, просто объединенных друг с другом, иногда вложенных друг в друга.

Here, a document is understood as a certain document, quite formal, described in some formal language, which essentially represents a set of keys and values, simply combined with each other, sometimes nested within one another.

То есть вы можете увидеть, что документ-ориентированная база данных, ну, в парсетском случае это может быть документ в виде XML представлен, может в виде JSON, что в таких базах данных как раз и принято, может на любом другом, в принципе, языке разметки или языке представления быть, все это будет являться документом.

That is, you can see that a document-oriented database, well, in the case of Parse, this could be a document presented in XML, it could be in JSON, which is commonly used in such databases, or it could be in any other markup language or representation language, all of this would be considered a document.

Ну и еще в таком каноническом описании NoSQL есть еще третий подвид, который называется Graph Database.

Well, in such a canonical description of NoSQL, there is also a third subtype called Graph Database.

Я с ними небольшой специалист, я краем глаза смотрел Neo4j, особо углубляться в эти дебри не буду, потому что подозреваю, что и вы не такие уж большие специалисты и не такие большие потребленцы Graph Database.

I am not much of a specialist in that area, I glanced at Neo4j out of the corner of my eye, I won't delve deeply into these complexities, because I suspect that you are not such big specialists either and not such big consumers of Graph Database.

Плюсы всех этих трех решений, особенно они заметны в случае Key-Value, хранилище – это потенциально очень высокая скорость доступа.

The advantages of all three solutions, especially noticeable in the case of Key-Value storage, are the potentially very high speed of access.

Ну, вы можете себе представить, из мэпов можно сделать очень оптимально.

Well, you can imagine that maps can be made very optimally.

Это организованная структура.

This is an organized structure.

Кроме того, системы, которые Key-Value, они очень хорошо распараллеливаются.

In addition, Key-Value systems can be very well parallelized.

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

They are parallelized in terms of storage, meaning that from a technical point of view, no pair of key-value is linked to another pair.

Такие случаи обработки популярные, я обсуждаю уже нами в подробностях, как-то несколько выпусков назад в RadioT, алгоритм или даже метод, наверное, MapReduce,

Such cases of processing are popular; I have discussed them with us in detail, like several episodes ago on RadioT, an algorithm or even a method, probably MapReduce.

прекрасно работают на таких парах, которые распределены между множеством серверов или лежат в каком-то виртуальном облаке.

They work wonderfully on such pairs that are distributed among multiple servers or are located in some virtual cloud.

Что касается документных баз данных, здесь все не так просто, но давайте про непросто и про то, как в документных базах данных поговорим на примере MongoDB,

As for document databases, it's not so simple here, but let's talk about the complexity and how it works in document databases using MongoDB as an example.

которую я как раз и решил избрать жертвой своих жестоких экспериментов.

whom I just decided to choose as the victim of my cruel experiments.

Прежде всего о своих требованиях, о моих требованиях к этой базе.

First of all, about my requirements, about my requirements for this database.

И ее я решил попробовать.

And I decided to give her a try.

Требования у меня были простые.

My requirements were simple.

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

For a very long time, I have been using a makeshift solution for data storage, and I still do, in essence.

то есть для сериализации и десериализации, для обмена данными.

that is for serialization and deserialization, for data exchange.

И решение это вполне элегантно, просто и универсально, и построено на основе протобаф-библиотеки и протобаф-форматов, известные вам фирмы Google.

And this solution is quite elegant, simple, and universal, and is built on the basis of the protobuf library and protobuf formats, known to you from the company Google.

Ну если упрощать...

Well, if we simplify...

Упрощать до полного идиотизма, хотя в жизни оно не настолько просто, как я тут до вас доношу.

Simplifying to complete idiocy, even though in life it is not as simple as I am conveying to you.

Всякая программа может генерировать некие записи последовательно.

Any program can generate certain records sequentially.

Эти записи либо сохранять в файл, либо передавать своим коллегам по обработке, либо еще куда-то девать.

These records should either be saved to a file, passed on to your colleagues in processing, or discarded elsewhere.

Эти записи, они очень уровня аппликации, то есть именно в концепциях и в абстракциях вашей предметной области.

These records are very much at the level of application, that is, specifically in the concepts and abstractions of your subject area.

Но если мне необходима запись, которая представляет в моей биржевой области трейд,

But if I need a record that represents a trade in my trading area,

то в этой записи и будет все, что вы можете себе про трейд представить.

Then this entry will contain everything you can imagine about trade.

Прайс, волюм, последовательный номер, время сделки, участники, ну и все, что обычно сделке соответствует.

Price, volume, serial number, transaction time, participants, and everything else that is usually associated with a transaction.

Все это у меня в протобаф описано.

All of this is described in my protobuf.

То есть прото это с определенного рода прототип, который компилируется потом в ваш код на вашем языке.

That is, proto is a certain kind of prototype that is then compiled into your code in your language.

И вот такими объектами я и манипулирую своей аппликацией.

And these are the objects I manipulate with my application.

Способ ничего не скажу удобный.

I won’t say anything about the convenient way.

Хороший, но есть у него сложность.

Good, but it has some complexity.

Он подходит для сохранения только в очень и очень примитивных случаях,

It is suitable for preservation only in very, very primitive cases.

когда вам достаточно последовательно сохранить кусок данных, ну или набор похожих данных,

when you can sufficiently store a chunk of data consistently, or a set of similar data,

а потом последовательно его прочитать.

and then read it sequentially.

Хорошим показателем того, что и разработчикам, видимо, этот протокол не был задуман как средство хранения больших объемов,

A good indication that, apparently, the developers did not intend this protocol as a means of storing large volumes.

у него там поначалу даже не было возможности сохранить куда-то больше, чем одну запись,

At first, he didn't even have the ability to save more than one record anywhere.

без бубны и такой-то матери.

Without the drum and such mother.

То есть необходимо было делать специальное телодвижение для того, чтобы множество подобных записей,

That is, it was necessary to make a specific gesture in order to create a multitude of similar entries,

записей одинаковой как бы с точки зрения протобаф структуры вместе где-то хранить, а потом оттуда читать.

to store records of the same structure, as if from the perspective of protobuf, together somewhere and then read from there.

Оно появилось, но суть не в этом.

It appeared, but that's not the point.

Суть в том, что если вам необходим индексный доступ по одному ключу,

The point is that if you need indexed access by one key,

а потом какой-то сложный индекс, а потом какой-то еще более случайный доступ,

and then some complex index, and then some even more random access,

тут-то и начинаются всякие грабли.

This is where all sorts of pitfalls start.

Постоял я.

I stood there.

На этих граблях какое-то время и пошел копать в сторону различных решений.

For some time, I stumbled on these rakes and started digging into various solutions.

Моим первым кандидатом на ВКП у него был Хадуб,

My first candidate for the VKP was Kadub.

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

But why I didn't like Khadub, and how I both played with him and tormented him, I can talk about for a long time.

У меня были еще решения полнотекстового поиска, которые заточены под работу вот как раз с протобаф записями.

I had other full-text search solutions that are specifically designed to work with protobuf records.

Тоже они подошли весьма условно по целому ряду причин.

They also approached it quite conditionally for a number of reasons.

Прежде всего по производительности и ресурса.

First of all, in terms of performance and resources.

Емкости.

Containers.

А MongoDB попался на глаза тоже в каком-то из обзоров,

MongoDB also caught my eye in one of the reviews.

где автор хвалил его за какую-то абсолютно фантастическую производительность.

where the author praised him for some absolutely fantastic performance.

С его слов была не то что в десятки, не то что в сотни,

According to him, it was not even in the tens, not even in the hundreds,

а в какие-то дикие сотни тысяч раз быстрее, чем в традиционной реляционной базе данных.

and in some wild hundreds of thousands of times faster than in a traditional relational database.

Мне это показалось не то что невероятным, но как минимум забавным.

I found it not so much incredible, but at least amusing.

Забавным и достойным того, чтобы попробовать.

Funny and worth a try.

Поставил MongoDB, начал с ним работать, и оказалось, что реальность, к сожалению, вовсе не такая прекрасная,

I installed MongoDB, started working with it, and it turned out that reality, unfortunately, is not so wonderful at all.

как все обзоры, слухи и рассказы, но она вполне определенная.

Like all reviews, rumors, and stories, but it is quite definite.

Вот об этой определенности я хочу поподробнее, ниже рассказать.

I want to tell you more about this certainty in detail below.

К сожалению, уже не в этом выпуске, потому что время наших разрешенных разговоров,

Unfortunately, not in this issue, because the time for our allowed conversations has passed.

а вы помните, в этом подкасте это 20 минут, подходит к концу.

Do you remember, this podcast is 20 minutes long and is coming to an end.

Я надеюсь, я вас этой затравочкой немножко увлек, завлек.

I hope I have somewhat intrigued you with this teaser.

И, наверное, следующий выпуск, не наверное, наверняка, раз уж такая затравка пошла,

And, probably, the next issue, not probably, for sure, since such a teaser has been made,

я посвящу как раз рассмотрению MongoDB с точки зрения сугубого практики,

I will dedicate my attention to examining MongoDB from a purely practical perspective,

у которого опыты этого уже вполне и даже завались.

who already has quite a lot of experience in this.

Как честный человек должен предупредить вас, что будет там не все так радушно и красиво,

As an honest person, I should warn you that it won't be all that hospitable and beautiful there.

как почему-то получается из обзоров и прочих интернетов.

It somehow turns out from reviews and other internet sources.

Ну, все это я расскажу с подробностями.

Well, I'll tell all of this in detail.

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

And with anger, and sometimes with joy in the voice in the next episode,

который выйдет на сайте utp.umputun.com.

which will be available on the website utp.umputun.com.

Приходите, слушайте, можете даже подписаться.

Come, listen, you can even subscribe.

Там есть специальная кнопочка для подписки.

There is a special button for subscribing there.

Тогда не потеряете и не пропустите следующий выпуск.

Then you won't miss the next issue.

Все, пока. Услышимся в следующем подкасте.

That's all, goodbye. We'll hear each other in the next podcast.

Continue listening and achieve fluency faster with podcasts and the latest language learning research.