EA027808B1 - Database management system - Google Patents
Database management system Download PDFInfo
- Publication number
- EA027808B1 EA027808B1 EA201500340A EA201500340A EA027808B1 EA 027808 B1 EA027808 B1 EA 027808B1 EA 201500340 A EA201500340 A EA 201500340A EA 201500340 A EA201500340 A EA 201500340A EA 027808 B1 EA027808 B1 EA 027808B1
- Authority
- EA
- Eurasian Patent Office
- Prior art keywords
- objects
- node
- nodes
- database
- transaction
- Prior art date
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
Description
Данное изобретение относится к области систем управления базами данных. Более конкретно данное изобретение относится к способу и устройству реализации многопользовательской распределенной системы управления базой данных, удовлетворяющей одновременно требованиям транзакционности, высокой готовности, отказоустойчивости и масштабируемости.This invention relates to the field of database management systems. More specifically, this invention relates to a method and apparatus for implementing a multi-user distributed database management system that simultaneously satisfies the requirements of transactionality, high availability, fault tolerance, and scalability.
Уровень техникиState of the art
За прошедшие годы системы управления базами данных (СУБД) прочно вошли в обиход и широко применяются в составе прикладных программных систем для многих отраслей человеческой деятельности. Поначалу системы управления базами данных создавались в расчете на обслуживание многих пользователей, называемых клиентами, одним физическим сервером. Это обусловлено относительной простотой, с которой в одномашинной системе можно обеспечить транзакционность базы данных, удовлетворив четыре стандартных требования к транзакционной системе: атомарность, согласованность, изолированность и надежность операций с данными (англ. ЛСГО - ЛЮписПу. СопЧЧспсу. Εοΐαΐίοη. ИигаЬййу).Over the past years, database management systems (DBMS) have become well-established and widely used as part of applied software systems for many branches of human activity. Initially, database management systems were created with the expectation of serving many users, called clients, as one physical server. This is due to the relative simplicity with which a single-machine system can ensure database transactionality by satisfying four standard requirements for a transaction system: atomicity, consistency, isolation, and reliability of data operations (eng. ЛСГО - ЛЮписПу.
Атомарность гарантирует, что транзакция всегда выполняется целиком либо не выполняется совсем. Согласованность гарантирует, что транзакции получают доступ лишь к окончательным результатам других транзакций; промежуточные состояния данных, обусловленные работой транзакции, не видны другим транзакциям. Изоляция гарантирует, что конкурентные транзакции не оказывают влияния друг на друга, а в случае пересечения транзакций по данным, они упорядочиваются по времени работы с данными, чтобы не нарушить принципы атомарности и согласованности. Надежность гарантирует, что успешно завершенная транзакция не будет уже отменена, а ее результат не будет потерян.Atomicity ensures that the transaction is always complete or not complete at all. Consistency ensures that transactions only gain access to the final results of other transactions; intermediate data states due to transaction operation are not visible to other transactions. Isolation ensures that competitive transactions do not affect each other, and in the event that transactions intersect according to data, they are ordered by the time they work with the data so as not to violate the principles of atomicity and consistency. Reliability guarantees that a successfully completed transaction will not be already canceled, and its result will not be lost.
Известен ряд подходов к созданию СУБД с ЛСГО-транзакциями в одномашинном варианте.There are a number of approaches to creating a DBMS with LSGO transactions in a single-machine version.
Ранние подходы основаны на использовании различных средств блокировки доступа к данным: исключительные и неисключительные блокировки, блокировки операций чтения, блокировки операций записи, блокировки с множественным конкурентным чтением и исключительной записью, причем блокировки могут применяться к индивидуальным объектам или записям, а также к странице памяти или диапазону записей.Early approaches are based on the use of various means of blocking access to data: exclusive and non-exclusive locks, blocking of read operations, blocking of write operations, locks with multiple concurrent reading and exclusive writing, and locks can be applied to individual objects or records, as well as to a memory page or range of records.
Поздние подходы основаны на управлении конкурентным доступом с помощью многоверсионности (англ. МУСС - МиШУегЧоп Сопсиггепсу Соп1то1), суть которых заключается в использовании временных меток или увеличивающихся значений идентификаторов транзакций, ассоциированных с последовательными версиями каждой записи. Каждой транзакции разрешено читать новейшую версию из множества записей, для которых временная метка или идентификатор меньше временной метки или идентификатора читающей транзакции. Таким образом, каждому клиенту на время каждой транзакции предоставляется логический снимок базы данных, обладающий тем свойством, что вносимые клиентом изменения в базу данных невидимы другим клиентам до момента фиксации транзакции. Этот способ управления эффективнее блокировок с точки зрения накладных расходов, он позволяет добиться того, что читающие транзакции не блокируют пишущих, а пишущие транзакции не блокируют читающих.Later approaches are based on concurrent access control using multi-versioning (eng. MUSS - MiSUegChop Sopsiggepsu Sop1to1), the essence of which is to use timestamps or increasing values of transaction identifiers associated with consecutive versions of each record. Each transaction is allowed to read the latest version from a variety of records for which the timestamp or identifier is less than the timestamp or identifier of the reading transaction. Thus, each client is provided with a logical snapshot of the database for the duration of each transaction, which has the property that the changes made by the client to the database are invisible to other clients until the transaction is committed. This control method is more effective than locks in terms of overhead, it allows you to ensure that reading transactions do not block writing, and writing transactions do not block reading.
В последнее время из-за развития глобальной сети Интернет возникла устойчивая тенденция увеличения количества обслуживаемых клиентов и объемов данных до предельных значений, с которыми может справиться один сервер. Кроме того, возникло новое требование обеспечения высокой готовности баз данных. Чтобы справиться с растущими требованиями, используются различные варианты вертикального и горизонтального масштабирования. Вертикальное масштабирование предполагает повышение производительности системы путем увеличения производительности компонентов одной машины, например, через увеличение числа процессоров, объема оперативной памяти, пропускной способности контроллеров ввода-вывода и числа задействованных параллельно дисковых устройств хранения. Г оризонтальное масштабирование предполагает повышение производительности многомашинной системы путем увеличения количества машин, называемых узлами, выполняющих одну и ту же функцию. Горизонтальное масштабирование удобнее и эффективнее вертикального масштабирования, а также выгоднее с экономической точки зрения, позволяя экстенсивно увеличивать производительность системы добавлением дешевых узлов потребительского уровня. Однако горизонтальное масштабирование требует значительно более сложного программного обеспечения.Recently, due to the development of the global Internet, there has been a steady tendency to increase the number of clients served and the amount of data to limit values that a single server can handle. In addition, a new requirement has emerged for high availability databases. To cope with the growing demands, various vertical and horizontal scaling options are used. Vertical scaling involves increasing system performance by increasing the performance of components of one machine, for example, by increasing the number of processors, RAM, throughput of I / O controllers and the number of disk storage devices involved in parallel. Horizontal scaling involves increasing the performance of a multi-machine system by increasing the number of machines called nodes that perform the same function. Horizontal scaling is more convenient and efficient than vertical scaling, as well as more economically viable, allowing you to extensively increase system performance by adding cheap consumer-level nodes. However, horizontal scaling requires significantly more sophisticated software.
В получивших широкое распространение реляционных СУБД, часто применяется кластерный подход, когда логический сервер состоит из нескольких узлов, каждый узел обладает процессором и оперативной памятью, а все узлы разделяют общий избыточный массив независимых дисков, соединенных с узлами высокопроизводительным контроллером ввода-вывода. При таком подходе все узлы разделяют общие данные во внешней памяти, через которую происходит синхронизация состояний узлов. Благодаря общей внешней памяти в кластере узлов обеспечивается единое управление временем и логическое упорядочивание всех транзакций для всех узлов. Положительной стороной этого подхода является обеспечение ЛСГО-транзакций, но он является экономически затратным и имеет низкий потолок масштабирования, особенно в отношении роста количества клиентов базы данных.In the widely used relational DBMSs, the cluster approach is often used when the logical server consists of several nodes, each node has a processor and RAM, and all nodes share a common redundant array of independent disks connected to nodes by a high-performance I / O controller. With this approach, all nodes share common data in external memory through which the synchronization of node states occurs. Thanks to shared external memory in a cluster of nodes, a single time management and logical ordering of all transactions for all nodes is provided. The positive side of this approach is the provision of LSGO transactions, but it is economically costly and has a low scalability ceiling, especially in relation to the growth in the number of database clients.
Тиражирование данных (англ. герПсаБоп) между несколькими серверами СУБД является другим подходом к масштабированию СУБД. При этом один узел считается главным и содержит основную ко- 1 027808 пию данных, с которой синхронизируются копии данных на других узлах. При выходе из строя главного узла его функция передается другому узлу. Примером этого подхода служит СУБД, состоящая из пары узлов, где один узел выполняет редко возникающие транзакции записи, а другой узел выполняет часто возникающие транзакции чтения. Тиражирование данных происходит в одном направлении, а узлы выполняют разные функции. Очевидными проблемами этого подхода являются недостаточные универсальность и масштабируемость, а также нарушение согласованности данных - клиент при чтении продолжает получать устаревшие данные до тех пор, пока не выполнится тиражирование обновленных данных.Duplication of data (Eng. GerPSaBop) between several DBMS servers is another approach to scaling DBMSs. At the same time, one node is considered the main one and contains the main copy of the data, with which copies of data on other nodes are synchronized. When the main node fails, its function is transferred to another node. An example of this approach is a DBMS, consisting of a pair of nodes, where one node performs rarely occurring write transactions, and the other node performs frequently occurring read transactions. Duplication of data occurs in one direction, and nodes perform different functions. The obvious problems of this approach are the lack of versatility and scalability, as well as a violation of data consistency - the client continues to receive outdated data while reading until the updated data is replicated.
Экономически целесообразным выглядит подход, основанный на федерализации данных, когда федеративная база данных создается как надстройка-медиатор, интегрирующая несколько отдельных баз данных, которые расположены на соединенных вычислительной сетью независимых узлах. Медиатор отвечает за создание общего логического представления (модели) данных и изолирует клиентов от распределенной физической природы данных. Положительной стороной этого подхода является возможность использования готовых одномашинных транзакционных СУБД для реализации баз данных отдельных узлов. Однако исключительно высокая сложность медиатора, необходимость использования дополнительного координатора транзакций с медленным и неустойчивым к отказам координатора двухфазным протоколом фиксации, перегруженность вычислительной сети, которые становятся особенно заметными с ростом количества клиентов и размера базы данных, делают указанный подход ресурсоемким и плохо масштабируемым.An approach based on the federalization of data looks economically feasible when a federated database is created as a mediator add-in that integrates several separate databases located on independent nodes connected by a computer network. The mediator is responsible for creating a common logical representation (model) of data and isolates clients from the distributed physical nature of the data. The positive side of this approach is the possibility of using ready-made single-machine transactional DBMSs for implementing databases of individual nodes. However, the extremely high complexity of the mediator, the need to use an additional transaction coordinator with a slow and unstable to the coordinator's failures two-phase fixation protocol, network congestion, which become especially noticeable with an increase in the number of clients and the size of the database, make this approach resource-intensive and poorly scalable.
Другие подходы, обеспечивающие хорошее горизонтальное масштабирование, связаны с ослаблением требований к атомарности и согласованности данных в пользу высоких показателей готовности, масштабируемости и производительности системы.Other approaches that provide good horizontal scaling are associated with weakening requirements for atomicity and data consistency in favor of high availability, scalability and system performance.
Секционирование (англ. ратйютид) - еще один подход, применяемый для создания распределенных систем управления базами данных. Он основан на разделении логической базы данных на отдельные части, хранимые на нескольких физических узлах. Секционирование может быть горизонтальным, когда в реляционной базе данных разделение таблиц происходит по строкам, или вертикальным, когда разделение таблиц происходит по колонкам.Partitioning (English ratyutid) is another approach used to create distributed database management systems. It is based on dividing the logical database into separate parts stored on several physical nodes. Partitioning can be horizontal when tables are divided into rows in a relational database, or vertically when tables are divided into columns.
Одним из видов горизонтального секционирования является шардинг (от англ. кйатбтд), применяемый также к объектным и другим системам управления базами данных не реляционного типа. Суть шардинга заключается в распределении объектов логической базы данных по физическим базам данных на узлах в соответствии со значением ключа объекта или значением некоторой хеш-функции от ключа объекта. В качестве примера можно привести разделение всех почтовых адресов на непересекающиеся диапазоны значений почтового индекса и распределение этих диапазонов вместе с включенными в них адресами среди узлов. Таким образом, географически близкие адреса с большой вероятностью попадут на один и тот же узел. Когда нужно избежать диспропорций между количеством объектов на узлах, используют хеш-функцию, например, функция суммирования всех цифр номера паспорта с делением результата на количество узлов позволяет получить номер целевого узла для каждого объекта и распределить записи с паспортными данными равномерно среди всех узлов.One of the types of horizontal partitioning is sharding (from English kyatbtd), which is also applied to object and other database management systems of non-relational type. The essence of sharding is the distribution of logical database objects among physical databases on nodes in accordance with the value of the object key or the value of some hash function from the object key. An example is the separation of all mailing addresses into disjoint ranges of postal code values and the distribution of these ranges together with the addresses included in them among the nodes. Thus, geographically close addresses are more likely to fall on the same node. When it is necessary to avoid imbalances between the number of objects on the nodes, a hash function is used, for example, the function of summing all digits of the passport number with dividing the result by the number of nodes allows you to get the target node number for each object and distribute records with passport data evenly among all nodes.
Подход на основе шардинга или секционирования базы данных имеет ряд недостатков. Среди них необходимость реализации двухфазного протокола фиксации транзакций, который, как известно, является медленным и неустойчивым к отказам координатора, а также нарушение требований ЛСГО для транзакций, охватывающих объекты на нескольких узлах. Труднопреодолимой проблемой этого подхода становится упорядочивание транзакций разных клиентов, пришедших одновременно на разные узлы и охватывающие одни и те же данные, которые распределены между несколькими узлами. Упорядочивание транзакций с помощью временных меток требует согласования системных часов всех узлов с уровнем точности, который на практике оказывается не достижим. Именно поэтому в этом подходе трудно реализовать управление конкурентным доступом с помощью многоверсионности. Малопригодными являются также блокировки, приводящие в распределенной системе к бесконечным ожиданиям. Кроме того, в этом подходе труднореализуемой или недопустимо медленной становится операция соединения таблиц записей (операция ΙΟΙΝ реляционной базы данных). В терминах объектных баз данных трудно становится реализовать запрос множества главных и подчиненных объектов, расположенных на разных узлах. Особенно в отношении запросов с условием попадания значений атрибутов записей или объектов в заданный диапазон.The sharding or partitioning approach has several drawbacks. Among them, the need to implement a two-phase transaction fixation protocol, which, as you know, is slow and unstable to coordinator failures, as well as a violation of LSGS requirements for transactions involving objects on several nodes. An insurmountable problem of this approach is the ordering of transactions of different clients that come simultaneously to different nodes and cover the same data that are distributed between several nodes. Ordering transactions using timestamps requires matching the system clocks of all nodes with a level of accuracy that in practice is not achievable. That is why in this approach it is difficult to implement competitive access control using multiversion. Unsuitable are also locks leading to endless expectations in a distributed system. In addition, in this approach, the operation of joining records tables (operation или relational database) becomes difficult to implement or unacceptably slow. In terms of object databases, it becomes difficult to implement the query of a set of main and subordinate objects located on different nodes. Especially in relation to queries with the condition that the values of the attributes of records or objects fall within the specified range.
Подходы на основе шардинга или секционирования базы данных применимы для ограниченного круга задач, когда масштабируемость и высокая готовность системы важнее, чем полноценная поддержка транзакций.Sharding or database partitioning approaches are applicable for a limited range of tasks when scalability and high availability of the system are more important than full-fledged transaction support.
Еще один подход основан на использовании распределенного транзакционного кэша. Суть его заключается в том, что все объекты базы данных, включая каталоги, записи таблиц, фрагменты индексов, а также другие данные и метаданные (т.н. атомы), распределяются в нескольких копиях среди множества транзакционных узлов, которые выполняют роль кэш-памяти. При этом как минимум один из узлов кэшем не является (т.н. архивный узел), а обеспечивает постоянное хранение базы данных. Операции редактирования объектов затрагивают архивный узел и все транзакционные узлы, где к моменту редактирования оказались кэш-копии объектов. Для этого с каждым объектом ассоциирован список ссылок наAnother approach is based on the use of a distributed transactional cache. Its essence lies in the fact that all database objects, including directories, table entries, index fragments, as well as other data and metadata (so-called atoms), are distributed in several copies among many transactional nodes that play the role of cache memory . At the same time, at least one of the nodes is not a cache (the so-called archive node), but provides permanent storage of the database. Object editing operations affect the archive node and all transactional nodes, where at the time of editing there were cache copies of objects. To do this, a list of links to
- 2 027808 узлы, где имеются его копии. Любой из транзакционных узлов может выполнить запрос пользователя, обеспечивая перетекание на него всех используемых для выполнения запроса данных. Копирование объектов на транзакционные узлы и согласование их копий выполняются по необходимости. Для обеспечения согласованности данных каждый узел ведет счетчик последней фиксации транзакции. Этот подход наиболее близок предлагаемому изобретению по достигнутому техническому результату, поскольку позволяет реализовать эластично масштабируемую систему управления базами данных с поддержкой АСГО-транзакций, в которой узлы могут быть даже географически распределены. Однако необходимость иметь архивный узел, на котором база данных помещается целиком, ограничивает возможности масштабирования и универсальность данного подхода. По сути проблема эффективного хранения и быстрого редактирования базы данных большого размера перекладывается на архивный узел. Труднопреодолимой проблемой этого подхода являются также полнотекстовая индексация и поиск по ключевым словам, когда объем индексных данных оказывается слишком большим для одного узла.- 2 027808 nodes where there are copies of it. Any of the transactional nodes can fulfill the user’s request, ensuring that all data used to execute the request flows over it. Copying objects to transactional nodes and matching their copies are performed as necessary. To ensure data consistency, each node maintains a counter of the last transaction commit. This approach is closest to the proposed invention in terms of the achieved technical result, since it allows to implement an elastically scalable database management system with support for ASGO transactions, in which nodes can even be geographically distributed. However, the need to have an archive node on which the entire database is located limits the scalability and versatility of this approach. In fact, the problem of efficient storage and quick editing of a large database is transferred to the archive node. An insurmountable problem of this approach is also full-text indexing and keyword search, when the volume of index data is too large for one node.
В известных подходах часто выполняется разделение между логической и физической схемами базы данных, когда логическая схема, используемая для проектирования базы данных, транслируется в физическую схему, используемую для реализации базы данных с помощью конкретной СУБД. Логическая схема оперирует высокоуровневыми понятиями, например, для ЕК-модели (от англ. ΕηΙίΙνКе1айопвЫр шойе1) - это сущности, атрибуты сущностей, связи между сущностями. Физическая схема оперирует низкоуровневыми понятиями, например, для реляционной базы данных - это таблицы, поля, индексы. Причем в известных подходах понятие связь между сущностями не является концепцией интерфейса с СУБД, а лишь моделируется тем или иным способом, что не позволяет эффективно управлять прямыми и обратными связями между распределенными среди узлов объектами и автоматически выполнять необходимую денормализацию данных для сокращения внутренней коммуникации между узлами и быстрого выполнения запросов.In well-known approaches, a separation is often made between the logical and physical schemas of a database, when the logical schema used to design the database is translated into the physical schema used to implement the database using a specific DBMS. The logical scheme operates with high-level concepts, for example, for the EC model (from the English ΕηΙίΙνКе1айопвЫршойе1) - these are entities, attributes of entities, relationships between entities. The physical scheme operates with low-level concepts, for example, for a relational database - these are tables, fields, indexes. Moreover, in well-known approaches, the concept of a relationship between entities is not a concept of an interface with a DBMS, but is merely modeled in one way or another, which does not allow you to efficiently manage direct and feedback connections between objects distributed among nodes and automatically perform the necessary data denormalization to reduce internal communication between nodes and fast query execution.
Подводя итог, можно констатировать, что известные подходы отвечают многим, но не всем требованиям, предъявляемым к современным базам данных. В действительности требуется система управления базами данных, обеспечивающая хорошее горизонтальное масштабирование при росте количества пользователей и объемов данных, при этом поддерживающая шардинг данных, когда функции постоянного хранения данных распределены между узлами, т.е. ни один из узлов не содержит целиком всей копии базы данных. Такая система должна обеспечивать атомарность, согласованность, изолированность и надежность транзакций, т.е. удовлетворять АСГО-требованиям. Система должна быть децентрализованной и обеспечивать высокую готовность и отказоустойчивость за счет средств резервирования и хранения избыточных копий объектов и метаданных на нескольких узлах. В дополнение к этому такая система управления базами данных должна предоставлять пользователю средства работы со структурированными данными (объектами), двоичными данными большого размера (файлами), а также средства высокопроизводительного полнотекстового поиска данных по ключевым словам.To summarize, we can state that the well-known approaches meet many, but not all, of the requirements for modern databases. Actually, a database management system is required that provides good horizontal scaling with an increase in the number of users and data volumes, while supporting data sharding, when the functions of permanent data storage are distributed between nodes, i.e. none of the nodes contains the entire copy of the database. Such a system should ensure atomicity, consistency, isolation and reliability of transactions, i.e. satisfy ASGO-requirements. The system should be decentralized and provide high availability and fault tolerance due to backup and storage of redundant copies of objects and metadata on several nodes. In addition to this, such a database management system should provide the user with tools for working with structured data (objects), large binary data (files), as well as means of high-performance full-text data search for keywords.
Сущность изобретенияSUMMARY OF THE INVENTION
Задачей изобретения является получение многопользовательской распределенной системы обработки данных, в которой ни один из узлов не содержит полного множества всех объектов базы данных.The objective of the invention is to obtain a multi-user distributed data processing system in which none of the nodes contains a complete set of all database objects.
Еще одной задачей изобретения является получение многопользовательской распределенной системы транзакционной обработки данных, обеспечивающей атомарность, согласованность, изолированность и надежность операций с данными.Another objective of the invention is to obtain a multi-user distributed system of transactional data processing, providing atomicity, consistency, isolation and reliability of data operations.
Еще одной задачей изобретения является получение многопользовательской распределенной системы обработки данных, обеспечивающей высокую степень готовности.Another objective of the invention is to obtain a multi-user distributed data processing system that provides a high degree of availability.
Еще одной задачей изобретения является получение многопользовательской распределенной системы обработки данных, обеспечивающей высокую степень отказоустойчивости.Another objective of the invention is to obtain a multi-user distributed data processing system that provides a high degree of fault tolerance.
Еще одной задачей изобретения является получение масштабируемой многопользовательской распределенной системы обработки данных.Another objective of the invention is to provide a scalable multi-user distributed data processing system.
В соответствии с одним из аспектов настоящего изобретения все перечисленные задачи решаются за счет горизонтального секционирования данных путем распределения (шардинга) и постоянного хранения объектов базы данных на нескольких узлах вычислительной сети с возможностью пересечения подмножеств объектов любых двух узлов, когда ни один узел не обязан хранить полное множество всех объектов базы данных, а также за счет управления прямыми и обратными логическими ссылками между объектами, когда для каждого объекта создается и поддерживается актуальным логический список обратных ссылок на объекты, содержащие прямые ссылки на данный объект, на хранящем объект узле хранятся ключи всех объектов, ссылающихся на данный объект, причем с каждым из этих ключей ассоциируется список обратных ссылок на объекты, расположенные на данном узле, а прямые ссылки на объекты, расположенные на других узлах, заменяются ссылками на узлы, с которых целевые объекты можно получить по ключу ссылающегося на них объекта, а также за счет упорядочивания объектов по значениям одного или нескольких полей и распределения копий объектов среди нескольких узлов базы данных таким образом, что все множество значений полей, участвующих в упорядочивании, делится на диапазоны, и каждому диапазону ставится в соответствие узел базы данных, где хранятся копии объектов, включенные при упорядочивании в этот диапазон, а также за счет передачи между узлами базы дан- 3 027808 ных сообщений с командами, позволяющими сохранять и извлекать объекты по запросам клиентов с проверкой условия запроса на тех узлах, где хранятся копии объектов, без передачи всех требуемых для проверки условия запроса индексных данных и копий объектов на один узел, координирующий выполнение запроса клиента. В основе эффективного горизонтального масштабирования системы управления базой данных лежит способ выдачи объектам базы данных уникальных значений первичных ключей, в котором уникальные значения первичных ключей выдаются каждым узлом независимо от других узлов и без обращения к третьей стороне, уникальные значения первичных ключей распределяются каждым узлом во всем диапазоне возможных значений первичных ключей равномерно небольшими группами. Для обеспечения согласованности данных каждый узел содержит увеличивающийся счетчик логического времени, используемый для выдачи меток времени, причем для любых двух значений счетчика времени определено отношение строгого порядка, счетчик времени увеличивается перед каждым внутренним событием узла, каждый узел передает текущее значение счетчика времени другим узлам при отправке любых сообщений, каждый узел при приеме сообщения от другого узла увеличивает свой счетчик времени так, чтобы он был больше наибольшего из текущего значения и принятого с сообщением значения счетчика времени, значение счетчика времени возвращается в каждом ответе на запрос клиента базы данных, хранится клиентом во время работы с базой данных и передается вместе с каждым запросом для согласованного доступа к данным.In accordance with one aspect of the present invention, all of the above problems are solved by horizontal partitioning of data by distribution (sharding) and permanent storage of database objects on several nodes of a computer network with the ability to intersect subsets of objects of any two nodes, when no node is required to store the full the set of all database objects, as well as by managing forward and backward logical links between objects, when each object is created and maintained logical list of backlinks to objects containing direct links to this object is relevant, the node that stores the keys of all objects referencing this object is stored on the node, and a list of backlinks to objects located on this node is associated with each of these keys, and direct links objects located on other nodes are replaced by links to nodes from which target objects can be obtained by the key of the object referencing them, as well as by ordering objects according to the values of one or more fields and distribution of copies of objects among several database nodes in such a way that the whole set of field values involved in ordering is divided into ranges, and each range is assigned a database node where copies of objects included in ordering in this range are stored, as well as the transmission account between nodes of the database of 3,027,808 messages with commands that allow you to save and retrieve objects at the request of customers with checking the conditions of the request at those nodes where copies of objects are stored, without transferring all required s to verify the conditions for requesting index data and copies of objects on one node coordinating the execution of a client request. An effective horizontal scaling of the database management system is based on the method of issuing unique primary key values to database objects, in which unique primary key values are issued by each node independently of other nodes and without resorting to a third party, unique primary key values are distributed by each node in the entire range possible primary key values in evenly small groups. To ensure data consistency, each node contains an increasing logical time counter used for issuing time stamps, and for any two values of the time counter, a strict order relation is defined, the time counter is incremented before each internal event of the node, each node transmits the current value of the time counter to other nodes when sending any messages, each node when receiving a message from another node increases its time counter so that it is greater than the largest of the current value and the time counter value received with the message, the time counter value is returned in each response to the database client’s request, it is stored by the client while working with the database, and transmitted with each request for coordinated access to the data.
В соответствии с другим аспектом настоящего изобретения задачи изобретения решаются за счет горизонтального секционирования данных путем распределения (шардинга) и постоянного хранения записей реляционной базы данных на узлах вычислительной сети с возможностью пересечения подмножеств записей любых двух узлов, когда ни один узел не обязан хранить полное множество всех записей базы данных, а также за счет управления прямыми и обратными логическими связями между сущностями базы данных, когда для каждой прямой связи создается и поддерживается актуальной логическая обратная связь, на хранящем запись узле хранятся обратные связи с этой записью, а прямые связи с записями, расположенными на других узлах, заменяются отображением в узлы, с которых связанные записи можно получить по ключу записи на исходном узле, а также за счет упорядочивания записей по значениям одного или нескольких полей и распределения копий записей среди нескольких узлов базы данных таким образом, что все множество значений полей, участвующих в упорядочивании, делится на диапазоны, и каждому диапазону ставится в соответствие узел базы данных, где хранятся копии записей, включенные при упорядочивании в этот диапазон, а также за счет передачи между узлами базы данных сообщений с командами, позволяющими создавать, обновлять и читать данные по запросам клиентов с проверкой условия запроса на тех узлах, где хранятся копии записей, без передачи всех требуемых для проверки условия запроса индексных данных и копий записей на один узел, координирующий выполнение запроса клиента. В основе эффективного горизонтального масштабирования системы управления базой данных лежит способ выдачи сущностям реляционной базы данных значений первичных ключей, в котором уникальные значения первичных ключей выдаются каждым узлом независимо от других узлов и без обращения к третьей стороне, уникальные значения первичных ключей распределяются каждым узлом во всем диапазоне возможных значений первичных ключей равномерно небольшими группами. Для обеспечения согласованности данных каждый узел содержит увеличивающийся счетчик логического времени, используемый для выдачи меток времени, причем для любых двух значений счетчика времени определено отношение строгого порядка, счетчик времени увеличивается перед каждым внутренним событием узла, каждый узел передает текущее значение счетчика времени другим узлам при отправке любых сообщений, каждый узел при приеме сообщения от другого узла увеличивает свой счетчик времени так, чтобы он был больше наибольшего из текущего значения и принятого с сообщением значения счетчика времени, значение счетчика времени возвращается в каждом ответе на запрос клиента базы данных, хранится клиентом во время работы с базой данных и передается вместе с каждым запросом для согласованного доступа к данным.In accordance with another aspect of the present invention, the objectives of the invention are achieved by horizontal partitioning of data by distribution (sharding) and permanent storage of relational database records on nodes of a computer network with the ability to intersect subsets of records of any two nodes, when no node is required to store the complete set of all database records, as well as by managing direct and inverse logical relationships between database entities, when for each direct relationship is created and maintained logical feedback is relevant, feedback is stored on the node storing the record with this record, and direct communications with records located on other nodes are replaced by mapping to nodes from which the associated records can be obtained by the record key on the source node, as well as sorting records by the values of one or more fields and distributing copies of records among several database nodes in such a way that the whole set of field values involved in the ordering is divided into ranges, and each range with the database node is kept in correspondence, where copies of records are stored that are included in this range during ordering, as well as by transmitting messages between the database nodes with commands that allow you to create, update and read data at the request of customers by checking the query conditions on those nodes where copies of records are stored, without transferring all the conditions for requesting index data and copies of records required for verification to one node coordinating the execution of the client’s request. An effective horizontal scaling of the database management system is based on the method of issuing primary key values to entities of a relational database, in which unique values of primary keys are issued by each node independently of other nodes and without resorting to a third party, unique values of primary keys are distributed by each node in the entire range possible primary key values in evenly small groups. To ensure data consistency, each node contains an increasing logical time counter used for issuing time stamps, and for any two values of the time counter, a strict order relation is defined, the time counter is incremented before each internal event of the node, each node transmits the current value of the time counter to other nodes when sending any messages, each node when receiving a message from another node increases its time counter so that it is greater than the largest of the current value and the time counter value received with the message, the time counter value is returned in each response to the database client’s request, it is stored by the client while working with the database, and transmitted with each request for coordinated access to the data.
Перечень чертежейList of drawings
На фиг. 1 схематически представлен один из вариантов топологии СУБД.In FIG. 1 schematically presents one of the options for the DBMS topology.
На фиг. 2 представлена схема аппаратных компонентов одного узла.In FIG. 2 shows a diagram of the hardware components of one node.
На фиг. 3 показана схема программных компонентов узла в разрезе ролей координатора и участника транзакции.In FIG. 3 shows a diagram of the software components of the node in the context of the roles of the coordinator and participant in the transaction.
На фиг. 4 показан пример графа объектов, которые содержат ссылки друг на друга и распределены некоторым образом среди узлов базы данных.In FIG. Figure 4 shows an example of a graph of objects that contain links to each other and are distributed in some way among database nodes.
На фиг. 5 показана детализированная структура объектов и ссылок для примера из фиг. 4.In FIG. 5 shows a detailed structure of objects and links for the example of FIG. 4.
На фиг. 6 показана детализированная структура ревизий объектов для примера из фиг. 5.In FIG. 6 shows a detailed structure of object revisions for the example of FIG. 5.
На фиг. 7 показана схема, позволяющая понять способ размещения объектов среди узлов базы данных.In FIG. 7 shows a diagram that allows you to understand how to place objects among database nodes.
На фиг. 8 показана блок-схема, помогающая понять способ, с помощью которого выполняются транзакции извлечения объектов из базы данных.In FIG. Figure 8 shows a flowchart that helps to understand the way in which transactions to retrieve objects from a database are performed.
На фиг. 9 показана блок-схема, помогающая понять способ, с помощью которого выполняются транзакции сохранения объектов в базу данных.In FIG. Figure 9 shows a flowchart that helps to understand the way in which transactions to save objects to a database are performed.
- 4 027808- 4 027808
На фиг. 10 показана блок-схема, дополняющая фиг. 9 и помогающая понять способ, с помощью которого выполняется сохранение объектов на узле-участнике в фрагмент базы данных.In FIG. 10 is a block diagram in addition to FIG. 9 and helping to understand the way in which objects are saved on a participating node to a database fragment.
На фиг. 11 показана первая часть блок-схемы, помогающей понять способ, с помощью которого выполняются транзакции поиска объектов в базе данных.In FIG. 11 shows the first part of a flow chart that helps to understand the way in which transactions to search for objects in a database are performed.
На фиг. 12 показана вторая часть блок-схемы, помогающей понять способ, с помощью которого выполняются транзакции поиска объектов в базе данных.In FIG. Figure 12 shows the second part of a flowchart that helps to understand the way in which transactions to search for objects in a database are performed.
На фиг. 13 представлен пример некоторой исходной системы управления базой данных, масштабируемой различными способами до вариантов, показанных на фиг. 14.In FIG. 13 is an example of some initial database management system scalable in various ways to the options shown in FIG. 14.
На фиг. 14 показаны варианты масштабирования системы управления базой данных из фиг. 13. Сведения, подтверждающие возможность осуществления изобретенияIn FIG. 14 shows scaling options for the database management system of FIG. 13. Information confirming the possibility of carrying out the invention
Сведения, подтверждающие возможность реализации изобретения, изложены далее в разделах Аппаратно-программное устройство, Структуры данных, Методы обработки данных.Information confirming the possibility of implementing the invention is set forth further in the sections Hardware-software device, Data Structures, Data Processing Methods.
Аппаратно-программное устройство.Hardware and software device.
Частью данного изобретения является изображенный на фиг. 1 вариант многопользовательской масштабируемой распределенной транзакционной системы управления базами данных 18. СУБД 18 включает в себя некоторое множество узлов от N1 до N8, взаимодействующих друг с другом на равноправной основе через вычислительную сеть 19. Так, например, узел N1 может напрямую обмениваться сетевыми сообщениями с узлами от N2 до N8. Обмен сообщениями происходит в асинхронном режиме, чтобы обеспечить максимальную пропускную способность системы при обработке запросов клиентов.A part of the present invention is shown in FIG. 1 variant of a multi-user scalable distributed transactional database management system 18. DBMS 18 includes a number of nodes N1 to N8, interacting with each other on an equal basis through computer network 19. So, for example, node N1 can directly exchange network messages with nodes from N2 to N8. Messaging occurs in asynchronous mode to ensure maximum system throughput when processing client requests.
Более детально архитектуру системы раскрывает фиг. 2, на которой показан состав аппаратных компонентов типичного узла 20. Согласно фиг. 2 типичный узел 20 содержит центральный процессор 25, который общается с одним или несколькими клиентами 21 через сетевой интерфейс 27 и вычислительную сеть 22. Одновременно узел 20 общается с другими такими же узлами через сетевой интерфейс 28 и вычислительную сеть 24. Центральный процессор 25 также взаимодействует с оперативной памятью 26, в которой хранится копия программы управления базой данных 29, реализующая предпочтительный вариант данного изобретения. При работе этой программы обеспечивается оперативное хранение объектов базы данных 30, выполняются запросы клиентов, обеспечивается коммуникация с такими же программами других узлов и решаются сопутствующие задачи. Центральный процессор 25 дополнительно взаимодействует через устройство ввода-вывода 31 с устройством энергонезависимой постоянной памяти 32, например с устройством накопления данных на жестких дисках. Устройство постоянной памяти 32 хранит последовательно записанные (т.н. сериализованные) данные объектов 33 и двоичные файлы 34 базы данных.The system architecture is described in more detail in FIG. 2, which shows the hardware components of a typical assembly 20. Referring to FIG. 2, a typical node 20 comprises a central processor 25 that communicates with one or more clients 21 via a network interface 27 and a computer network 22. At the same time, a node 20 communicates with other same nodes through a network interface 28 and a computer network 24. The central processor 25 also interacts with random access memory 26, which stores a copy of the database management program 29, which implements the preferred embodiment of the present invention. When this program is running, operational storage of database objects 30 is provided, customer requests are executed, communication with the same programs of other nodes is ensured, and related tasks are solved. The central processor 25 additionally interacts via an input-output device 31 with a non-volatile read-only memory 32, for example, a data storage device on hard drives. The read-only memory device 32 stores sequentially recorded (so-called serialized) object data 33 and binary database files 34.
Обычно вычислительные сети 22 и 24 представляют собой физические подсети вычислительной сети 19 или логические маршруты внутри вычислительной сети 19. Разделение вычислительной сети 19 на независимые подсети обычно выполняется по соображениям безопасности и производительности, хотя и не является обязательным. Вычислительная сеть 22 должна обеспечивать высокую пропускную способность и допускает относительно большие времена задержки при передаче сообщений в силу удаленности клиентов. Вычислительная сеть 22 обычно использует технологии глобальной сети Интернет и содержит устройство балансировки запросов 23, которое маршрутизирует и равномерно распределяет запросы клиентов среди всех узлов, подключенных к сети 22. Вычислительная сеть узлов 24 должна обеспечивать высокую пропускную способность и малое время задержки сообщений в сети при межузловой коммуникации и обычно основана на технологиях локальных сетей ЕШете! и оптоволоконных линий связи.Typically, computer networks 22 and 24 are physical subnets of computer network 19 or logical routes within computer network 19. Separation of computer network 19 into independent subnets is usually performed for security and performance reasons, although it is not required. Computing network 22 should provide high throughput and allow relatively large delay times when transmitting messages due to the remoteness of the clients. Computing network 22 usually uses global Internet technologies and contains a request balancing device 23 that routes and evenly distributes client requests among all nodes connected to network 22. Computing network of nodes 24 should provide high throughput and low latency of messages in the network during interworking communication and is usually based on LAN technology and fiber optic communication lines.
В качестве протокола передачи сообщений вычислительные сети 22 и 24 могут использовать протокол ТСР (англ. Тгапвт188юп Οοηίτοί Рго1оео1 - протокол управления передачей), являющийся протоколом транспортного уровня сети Интернет и обеспечивающий надежную передачу потока данных через установленное соединение. Кроме того, в качестве протокола передачи сообщений в сетях 22 и 24 могут использоваться протоколы прикладного уровня, например протокол НТТР (англ. НурегТех! ТгапзГег Рго1оео1 - протокол передачи гипертекста), который является основным протоколом всемирной паутины (т.н. веб), работает поверх протокола ТСР, обеспечивает диалоговое взаимодействие в режиме запросответ, имеет средства типизации данных и задания контекстных данных (т.н. куки), возможности переадресации запросов и их мультиплексирования в рамках одного соединения, а также позволяет легко преодолевать сетевые экраны. Может также использоваться протокол прикладного уровня §ОАР (англ. §1тр1е ОЬ)ес1 Асееве Рго1оео1 - простой протокол доступа к объектам), используемый веб-службами для обмена структурированными сообщениями и работающий поверх протокола НТТР, а также другие подобные протоколы. Рассматриваемый вариант СУБД поддерживает в качестве базового протокола передачи сообщений несколько протоколов, в частности протоколы ТСР и НТТР, выбираемые через параметры конфигурации системы, причем протокол ТСР предпочтительно используется для взаимодействия между узлами (из соображений производительности), а протокол НТТР - для взаимодействия с клиентами 21 (с целью преодоления сетевых экранов и обеспечения доступа к базе данных веб-клиентов).As a protocol for transmitting messages, computer networks 22 and 24 can use the TCP protocol (English Tgapvt188up Οοηίτοί Рго1ео1 - transmission control protocol), which is the protocol of the transport layer of the Internet network and ensures reliable transmission of the data stream through the established connection. In addition, application-level protocols can be used as the message transfer protocol in networks 22 and 24, for example, the HTTP protocol (English NuregTech! TgapzGeg Рgo1ео1 - the hypertext transfer protocol), which is the main protocol of the world wide web (the so-called web), it works on top of the TCP protocol, provides dialogue interaction in the request-response mode, has the means of typing data and setting contextual data (so-called cookies), the ability to forward requests and multiplex them within the same connection, and also allows so easy to overcome firewalls. The application-level protocol §ОАР (English §1р1е ОБ) ес1 Асееве Рго1ео1 - a simple protocol for accessing objects) used by web services for exchanging structured messages and working on top of the HTTP protocol, as well as other similar protocols, can also be used. The DBMS option under consideration supports several protocols as the basic message transfer protocol, in particular, the TCP and HTTP protocols selected through the system configuration parameters, the TCP protocol being preferably used for interaction between nodes (for performance reasons), and the HTTP protocol for interacting with clients 21 (in order to overcome firewalls and provide access to a database of web clients).
В предпочтительном варианте осуществления изобретения используется объектно-ориентированная парадигма программирования (ООП). Согласно парадигме ООП объекты представляют собой динамически создаваемые экземпляры классов, объединяющие в себе данные (т.н. свойства) и подпрограммы ихIn a preferred embodiment, an object-oriented programming paradigm (OOP) is used. According to the OOP paradigm, objects are dynamically created instances of classes that combine data (so-called properties) and their routines
- 5 027808 обработки (т.н. методы). Классы являются описаниями динамических модулей, экземпляры которых объекты -можно создавать в неограниченном количестве в отличие от статических модулей структурного программирования. Классы как типы данных могут расширять другие классы (т.н. наследование) и переопределять работу методов за счет использования механизма косвенного вызова подпрограмм (т.н. полиморфизм). Специалистам в данной области техники должно быть очевидным, что изобретение может быть реализовано как с использованием, так и без использования средств ООП.- 5,027,808 processing (so-called methods). Classes are descriptions of dynamic modules, instances of which objects can be created in unlimited quantities, in contrast to static modules of structural programming. Classes as data types can extend other classes (the so-called inheritance) and redefine the work of methods by using the mechanism of indirect call of subprograms (the so-called polymorphism). It will be apparent to those skilled in the art that the invention can be practiced both with and without using OOP tools.
На фиг. 3 изображен состав программных компонентов типичного узла 20, который может выступать в двух ролях: 1) координатор транзакции, 2) участник транзакции. В рассматриваемом варианте осуществления изобретения любой узел способен выполнять как одну из ролей, так и одновременно обе указанные роли. Согласно фиг. 3 узел 40 выступает в качестве координатора транзакций, предоставляя клиентам интерфейс и обеспечивая доступ к базе данных, а узел 60 выступает в качестве участника транзакций, обеспечивая оперативное и постоянное хранение данных. Таким образом, узлы 40 и 60 функционально идентичны, а при работе в той или иной роли в них задействуется тот или иной набор функциональных модулей. Модули и связи, которые задействуются, отмечены непрерывной линией, а модули и связи, которые не задействуются, - пунктирной линией.In FIG. 3 shows the composition of the software components of a typical node 20, which can play two roles: 1) a transaction coordinator, 2) a transaction participant. In the considered embodiment, any node is capable of performing both one of the roles and simultaneously both of these roles. According to FIG. 3, node 40 acts as a transaction coordinator, providing clients with an interface and providing access to the database, and node 60 acts as a participant in transactions, providing fast and permanent data storage. Thus, the nodes 40 and 60 are functionally identical, and when working in one role or another, one or another set of functional modules is involved in them. Modules and communications that are enabled are marked with a continuous line, and modules and communications that are not involved with a dashed line.
Узел-координатор транзакций 40 с помощью сетевой службы приема клиентских запросов 41 принимает запросы от клиентов базы данных 21 через вычислительную сеть 22.The transaction coordinator node 40, using the network service for receiving client requests 41, receives requests from clients of the database 21 through the computer network 22.
Сетевая служба приема клиентских запросов 41 представляет собой интерфейс связи клиента с СУБД и является веб-службой. В предпочтительном варианте осуществления изобретения служба 41 основана на протоколе НТТР. Служба 41 выполняет две задачи: десериализацию - последовательное чтение данных клиента из входящего сетевого потока и восстановление из этих данных объектов запроса; сериализацию - преобразование объектов, полученных в результате выполнения запроса, в поток последовательных данных с передачей их через сеть клиенту. В качестве формата данных при сериализации и десериализации обычно используется текст на некотором языке разметки документов с простым формальным синтаксисом, например на языке ХМЬ (от англ. ехЮгМЫе Магкир Ьапдиаде - расширяемый язык разметки).The network service for receiving client requests 41 is an interface for communication between a client and a DBMS and is a web service. In a preferred embodiment, the service 41 is based on the HTTP protocol. Service 41 performs two tasks: deserialization - sequentially reading client data from an incoming network stream and restoring request objects from this data; serialization - the conversion of objects obtained as a result of a query into a stream of serial data with their transmission through the network to the client. As a data format for serialization and deserialization, text in some markup language of documents with a simple formal syntax is usually used, for example, in the language XMB (from English exMagMe Magkir Lapdiade - an extensible markup language).
Сетевая служба приема клиентских запросов 41 передает десериализованные запросы ядру выполнения клиентских запросов 42, преобразующему команды более высокого уровня клиента в последовательность команд более низкого уровня системы. В общих чертах, ядро выполнения клиентских запросов обеспечивает синтаксический разбор, компиляцию и оптимизацию клиентских запросов, а затем выполнение команд управления над другими объектами системы. Команды выполняются над такими объектами, как менеджер системных транзакций 43, список баз данных 44, фрагмент базы данных 45, канал связи с другим узлом 54, а также над подчиненными им объектами.The network service for receiving client requests 41 transmits deserialized requests to the kernel for executing client requests 42, converting the commands of a higher level of a client into a sequence of commands of a lower level of the system. In general terms, the kernel for executing client requests provides parsing, compilation and optimization of client requests, and then executing control commands on other objects of the system. Commands are executed on such objects as the system transaction manager 43, the list of databases 44, a fragment of the database 45, the communication channel with another node 54, as well as on their subordinate objects.
Клиентские запросы могут быть представлены в виде объектов некоторого программного интерфейса СУБД или в виде текстовых описаний на некотором языке, таком, например, как язык ЗОБ (от англ. 81гис1игеб Онегу Ьапдиаде - язык структурированных запросов). Язык ЗОБ применяется в системах управления реляционными базами данных.Client requests can be presented in the form of objects of some DBMS software interface or in the form of text descriptions in some language, such as, for example, the language of the GOITER (from English 81gis1igeb Onegu Lapdiade - the language of structured queries). The SCA language is used in relational database management systems.
В рассматриваемом варианте осуществления изобретения предложены следующие виды запросов клиента к базе данных: Сохранить объекты, Извлечь объекты, Найти и извлечь объекты по условию. За каждым видом запроса стоят соответствующие классы, описывающие объект запроса и объект ответа, передаваемые между клиентом 21 и ядром выполнения запросов 42.In the present embodiment, the following types of client queries to the database are proposed: Save objects, Extract objects, Find and extract objects by condition. Behind each type of request there are corresponding classes that describe the request object and the response object transmitted between the client 21 and the query execution core 42.
Согласно фиг. 3 фрагменты базы данных 45 и 65 хранят и обслуживают подмножества данных логической базы данных. Таких фрагментов на одном узле может быть много, поскольку в рассматриваемом предпочтительном варианте реализации изобретения узел поддерживает работу одновременно с несколькими независимыми базами данных в рамках одной и той же инфраструктуры узлов. Фрагменты всех независимых баз данных одного узла собраны в списки 44 и 64. Каждая база данных идентифицируется именем, а списки баз данных 44 и 64 обеспечивают доступ к нужному фрагменту по имени базы данных.According to FIG. The 3 database fragments 45 and 65 store and serve subsets of the logical database data. There can be many such fragments on one node, since in the preferred embodiment of the invention under consideration the node supports working simultaneously with several independent databases within the same node infrastructure. Fragments of all independent databases of one node are collected in lists 44 and 64. Each database is identified by its name, and database lists 44 and 64 provide access to the desired fragment by the database name.
Ядро выполнения клиентских запросов 42 на узле-координаторе транзакций 40 использует лишь те модули фрагмента базы данных 45, которые необходимы для координации транзакций, а именно конфигурацию базы данных 46, менеджер транзакций 48 и генератор ключей 50. Хранение данных обеспечивают фрагменты базы данных на узлах-участниках, например фрагмент 65 на узле-участнике 60. Во фрагменте базы данных 65 задействуются лишь те модули, которые необходимы для обеспечения хранения данных и транзакционной работы с ними, а именно конфигурация базы данных 66, менеджер транзакций 68, первичный индекс 67, вторичные индексы 69, ссылочные индексы 71, постоянное хранилище 72 и файловое хранилище 73.The kernel for executing client requests 42 on the transaction coordinator node 40 uses only those modules of the database fragment 45 that are necessary for coordinating transactions, namely the database configuration 46, the transaction manager 48 and the key generator 50. Data fragments are provided by the database fragments on the nodes- participants, for example, fragment 65 on the participating node 60. In the fragment of database 65, only those modules are used that are necessary to ensure data storage and transactional work with them, namely, the configuration of database 66, edzher transaction 68, the primary index 67, secondary codes 69, reference codes 71, 72 and a persistent storage file storage 73.
Для выполнения клиентского запроса ядро 42 превращает клиентский запрос в множество внутренних запросов к фрагментам на других узлах, где находятся запрашиваемые данные. Внутренние запросы передаются ядру выполнения внутренних запросов 74 каждого вовлеченного в транзакцию узлаучастника 60 через логический канал связи 55 узла-координатора и через соответствующий ему логический канал связи 75 узла-участника. Двунаправленный логический канал связи создается между каждой парой узлов. Он обеспечивает прозрачное взаимодействие ядра выполнения клиентских запросов 42 иTo execute a client request, the kernel 42 turns the client request into many internal requests for fragments on other nodes where the requested data is located. Internal requests are transmitted to the internal query execution core 74 of each participant node 60 involved in the transaction through the logical communication channel 55 of the coordinator node and through the corresponding logical communication channel 75 of the participant node. A bi-directional logical communication channel is created between each pair of nodes. It provides transparent interaction between the kernel for executing client requests 42 and
- 6 027808 ядра выполнения внутренних запросов 74 с фрагментом базы данных на другом узле так, будто он расположен на том же узле, что и ядро запросов.- 6 027808 internal query execution kernel 74 with a database fragment on another node as if it is located on the same node as the query core.
Передача сообщений с внутренними запросами и прием сообщений с ответами выполняется каналом связи с помощью очередей исходящих и входящих сообщений. Очередь исходящих сообщений 56 обслуживается сетевой службой отправки сообщений 58, которая изымает запросы из очереди и передает их со своего узла, в частности узла 40, сетевой службе приема сообщений 79 на узле-участнике 60. Сетевая служба приема сообщений 79 ставит входящие запросы в очередь входящих сообщений 77. Ядро выполнения внутренних запросов 74 изымает запросы из этой очереди и выполняет их. Результирующие ответы на внутренние запросы попадают в очередь исходящих сообщений 76. Сетевая служба отправки сообщений 78 изымает исходящие ответы из этой очереди и передает их с узла-участника 60 на узелкоординатор 40, где они попадают сетевой службе приема сообщений 59, которая ставит ответы в очередь входящих сообщений. Входящие ответы ассоциируются каналом связи 55 с исходящими запросами и возвращаются ядру выполнения клиентских запросов 42.Sending messages with internal requests and receiving messages with answers is performed by the communication channel using queues of outgoing and incoming messages. The outgoing message queue 56 is serviced by the network message sending service 58, which removes requests from the queue and transfers them from its node, in particular node 40, to the network message receiving service 79 at the member node 60. The network message receiving service 79 puts incoming requests in the incoming queue Messages 77. The kernel for executing internal requests 74 removes requests from this queue and executes them. Resultant responses to internal requests fall into the outgoing message queue 76. The network message sending service 78 removes the outgoing replies from this queue and transfers them from the participating node 60 to the coordinator node 40, where they fall into the network message receiving service 59, which puts the replies to the incoming queue messages. Incoming responses are associated with communication channel 55 with outgoing requests and are returned to the client request execution core 42.
Чтобы сообщение с ответом можно было сопоставить сообщению с запросом, каждое сообщение содержит идентификатор пары запрос-ответ. Идентификатор выдается сообщению с запросом, путешествует вместе с ним на вызываемый узел, затем копируется из сообщения с запросом в сообщение с ответом и возвращается на вызывающий узел.So that the response message can be matched with the request message, each message contains the identifier of the request-response pair. The identifier is issued to the request message, travels with it to the called node, then it is copied from the request message to the response message and returned to the calling node.
В реализации сетевой службы отправки сообщений 56 и сетевой службы отправки сообщений 76 рекомендуется применять буферизацию и мультиплексирование - по возможности передавать несколько сообщений нескольких вычислительных потоков одним сетевым пакетом базового транспортного протокола, выбранного для взаимодействия узлов. Буферизация и мультиплексирование позволяют увеличить пропускную способность сети, сократить сетевой трафик и уменьшить среднее время задержки при передаче сообщений в вычислительной сети узлов 24.In the implementation of the network message sending service 56 and the network message sending service 76, it is recommended to use buffering and multiplexing - if possible, transmit several messages of several computing streams with one network packet of the basic transport protocol selected for node interaction. Buffering and multiplexing can increase network bandwidth, reduce network traffic and reduce the average delay time when transmitting messages in the computing network of nodes 24.
Согласно фиг. 3 в рассматриваемом варианте реализации изобретения фрагмент базы данных узла содержит следующие модули: конфигурация базы данных, менеджер транзакций, генератор ключей, первичный индекс, вторичные индексы, ссылочные индексы, файловое хранилище, постоянное хранилище. Перечисленные модули рассмотрены ниже.According to FIG. 3, in the present embodiment, the node database fragment contains the following modules: database configuration, transaction manager, key generator, primary index, secondary indexes, reference indexes, file storage, persistent storage. The listed modules are discussed below.
Конфигурация базы данных 46 (на узле-координаторе) и 66 (на узле-участнике) содержит объекты, описывающие структуру базы данных. В рассматриваемом варианте реализации изобретения конфигурация базы данных включает определения типов объектов, определения способов упорядочивания объектов по значениям одного или нескольких полей (т.н. индексы базы данных), список узлов размещения базы данных, карты размещения индексов среди узлов, карты размещения файлов среди узлов, принимаемый для базы данных уровень резервирования. Определение типа объектов (т.н. сущности базы данных) состоит из определений скалярных и ссылочных полей объектов этого типа. Для ссылочных полей (т.н. отношений) указываются соответствующие им в адресуемых объектах поля с обратными ссылками. Значения обратных ссылок отслеживаются и, в случае необходимости, автоматически добавляются, удаляются или корректируются системой управления базой данных при установке пользователем прямых ссылок. Ссылочные поля могут быть списковыми (наиболее распространенный случай) и одиночными. Списковое ссылочное поле содержит множество ссылок, одиночное ссылочное поле содержит одну ссылку. Обратной ссылкой для любого ссылочного поля может быть одиночное или списковое поле в адресуемом объекте. Способы упорядочивания объектов по значениям одного или нескольких полей в рассматриваемом варианте реализации изобретения классифицированы следующим образом: первичный индекс, вторичные индексы, ссылочные индексы. Все виды индексов и карты размещения индексов среди узлов рассмотрены ниже.The database configuration 46 (on the coordinating node) and 66 (on the participating node) contains objects that describe the structure of the database. In this embodiment of the invention, the database configuration includes determining the types of objects, determining ways to sort objects by the values of one or more fields (the so-called database indexes), a list of database allocation nodes, index allocation maps among nodes, file allocation maps among nodes The accepted backup level for the database. The definition of the type of objects (the so-called database entity) consists of the definitions of scalar and reference fields of objects of this type. For reference fields (the so-called relations), the fields with backlinks corresponding to them in the addressable objects are indicated. Backlink values are monitored and, if necessary, automatically added, deleted, or adjusted by the database management system when the user sets direct links. Reference fields can be list (the most common case) and single. A list link field contains many links, a single link field contains one link. The backward link for any reference field can be a single or list field in the addressed object. Methods of ordering objects according to the values of one or more fields in the considered embodiment of the invention are classified as follows: primary index, secondary indices, reference indices. All types of indices and index placement maps among nodes are discussed below.
Согласно фиг. 3 фрагмент базы данных узла содержит менеджер транзакций. Менеджер транзакций 48 (на узле-координаторе) и 68 (на узле-участнике) обеспечивает управление распределенными транзакциями. Механизм распределенных транзакций подробно рассмотрен ниже в описании изобретения. Менеджер транзакций обеспечивает средства создания, старта, фиксации и отката транзакций. Он включает в себя список текущих транзакций, реестр активных клиентов, генератор временных меток транзакций, а также сборщик мусора, обеспечивающий удаление устаревших ревизий объектов и объектов состояния транзакций.According to FIG. The 3rd fragment of the host database contains a transaction manager. Transaction Manager 48 (on the coordinating node) and 68 (on the participating node) provide management of distributed transactions. The distributed transaction mechanism is discussed in detail below in the description of the invention. The transaction manager provides the means to create, start, commit, and roll back transactions. It includes a list of current transactions, an active client registry, a transaction timestamp generator, and a garbage collector that removes obsolete revisions of transactional and state objects.
Кроме набора менеджеров транзакций - по одному на каждый фрагмент базы данных - узел содержит менеджер системных транзакций, показанный на фиг. 3 блоками 43 и 63 в узлах 40 и 60 соответственно. Менеджер системных транзакций обеспечивает атомарное и согласованное выполнение административных запросов клиента, в частности запросов создания, удаления и конфигурирования баз данных. Функционально менеджер системных транзакций ничем не отличается от менеджера транзакций фрагмента базы данных, поскольку является экземпляром их общего класса. Отличие заключается в том, что системные транзакции всегда охватывают все узлы СУБД, причем как узел-координатор транзакции, так и узлы-участники транзакции.In addition to a set of transaction managers — one for each database fragment — the node contains a system transaction manager, shown in FIG. 3 blocks 43 and 63 at nodes 40 and 60, respectively. The system transaction manager provides atomic and consistent execution of client administrative requests, in particular requests for creating, deleting, and configuring databases. Functionally, the system transaction manager is no different from the transaction manager of a database fragment, since it is an instance of their common class. The difference is that system transactions always cover all DBMS nodes, both the transaction coordinating node and the transaction participating nodes.
Генератор ключей 50 используется узлом-координатором для создания уникальных первичных ключей объектов базы данных. В рассматриваемом варианте реализации изобретения первичный ключ представляет собой 64-битное целое число. Чтобы ключи, выдаваемые разными узлами, не повторялись,The key generator 50 is used by the coordinator node to create unique primary keys for database objects. In this embodiment, the primary key is a 64-bit integer. So that keys issued by different nodes do not repeat,
- 7 027808 часть битов в значении ключа служит для кодирования номера узла, выдавшего ключ. Способ выдачи первичных ключей приведен ниже в описании структур данных настоящего изобретения.- 7 027808 part of the bits in the key value is used to encode the number of the node that issued the key. A method for issuing primary keys is described below in the description of the data structures of the present invention.
Первичный индекс 67 на узле-участнике представляет собой фрагмент словаря, отображающего первичные ключи объектов в ячейки хранения объектов. Добавление в словарь нового ключа и соответствующей ему ячейки хранения объекта происходит на узле атомарно для клиентских запросов. В рассматриваемом варианте реализации изобретения атомарность обеспечивается за счет механизма блокировок. Ячейка хранения объекта создается один раз при добавлении в словарь нового первичного ключа и при редактировании объекта не пересоздается. Она хранит список ревизий объекта и использует механизм МУСС для управлении конкурентным доступом с помощью многоверсионности. Первичный индекс распределяется среди узлов СУБД на основании заданной в конфигурации базы данных 46 (на узлекоординаторе) и 66 (на узле-участнике) карты размещения первичного индекса. Карта размещения первичного индекса используется узлом-координатором для определения узлов-участников транзакции. В некотором варианте реализации изобретения карта размещения первичного индекса может быть построена следующим образом. Множество возможных значений первичного ключа объекта разбито на непрерывные диапазоны. Каждому диапазону поставлен в соответствие список узлов, на которых хранятся копии объектов с ключами из данного диапазона. Наличие избыточных копий объектов необходимо для обеспечения высокой степени готовности и устойчивости системы к отказам узлов. Карта размещения первичного индекса применяется для доступа к объекту по его ключу. По значению ключа объекта определяется номер диапазона первичного индекса. По номеру диапазона выбирается список узлов, где хранятся копии объекта. Из списка узлов выбирается любой узел для чтения объекта. На выбранном узле по значению ключа в первичном индексе отыскивается ячейка хранения объекта и из нее, в соответствии с временной меткой клиента, выбирается ревизия объекта. Более подробно структура карты размещения первичного индекса и способ ее применения приведены ниже в описании настоящего изобретения.The primary index 67 on the member node is a fragment of a dictionary that maps the primary keys of objects to the object storage cells. Adding a new key to the dictionary and the corresponding object storage cell occurs on the node atomically for client requests. In the present embodiment, atomicity is ensured by a locking mechanism. An object storage cell is created once when a new primary key is added to the dictionary and is not recreated when editing the object. It maintains a list of object revisions and uses the ICCM mechanism to control competitive access using multi-versioning. The primary index is distributed among the DBMS nodes based on the database 46 (on the node coordinator) and 66 (on the participant node) of the primary index allocation map. The primary index allocation map is used by the coordinating node to determine the nodes involved in the transaction. In an embodiment of the invention, a primary index allocation map may be constructed as follows. The set of possible values of the primary key of the object is divided into continuous ranges. Each range is assigned a list of nodes on which copies of objects with keys from this range are stored. The presence of redundant copies of objects is necessary to ensure a high degree of readiness and system stability to node failures. The primary index location map is used to access an object by its key. The value of the object key determines the range number of the primary index. The range number selects a list of nodes where copies of the object are stored. From the list of nodes, any node is selected to read the object. On the selected node, by the key value in the primary index, the object storage cell is searched and from it, in accordance with the client’s time stamp, the object’s revision is selected. In more detail, the structure of the primary index placement map and the method of its application are described below in the description of the present invention.
Вторичные индексы 69 на узле-участнике - это фрагменты вторичных индексов в данном фрагменте базы данных. У каждого вторичного индекса существует идентификатор, назначаемый в конфигурации базы данных 46 (на узле-координаторе) и 66 (на узле-участнике) и используемый в запросах клиентов. По идентификатору выбирается требуемый вторичный индекс. Вторичный индекс представляет собой упорядоченный по значениям одного или нескольких полей набор объектов. Поля, по которым происходит упорядочивание, образуют вторичный ключ. Если в любой заданный момент времени вторичному ключу соответствует не более одного объекта, вторичный ключ считается уникальным. Неуникальному вторичному ключу может соответствовать несколько объектов. Вторичный индекс распределяется среди узлов СУБД на основании заданной в конфигурации базы данных 46 (на узле-координаторе) и 66 (на узле-участнике) карты размещения вторичного индекса. Карта размещения вторичного индекса аналогична карте размещения первичного индекса с той лишь разницей, что разбиваемые на диапазоны ключи вторичного индекса могут состоять из нескольких полей различных типов. Карта размещения вторичного индекса может быть составлена так, что на одном узле окажутся несколько диапазонов одного и того же вторичного индекса. Все диапазоны вторичного индекса, хранимые на одном узле, составляют фрагмент вторичного индекса. Физически каждый фрагмент вторичного индекса реализуется через хорошо известные специалистам в данной области структуры данных с характерным набором операций - упорядоченный динамический массив и/или двоичное дерево. Для обеспечения многоверсионного доступа к объектам в настоящей реализации изобретения во вторичный индекс включаются ревизии объектов вместе с ячейками хранения объектов. Уникальному вторичному ключу в такой структуре данных могут соответствовать несколько ревизий одного и того же объекта. При этом уникальность вторичного ключа обеспечивается для любой заданной временной метки на уровне ячеек хранения объектов.Secondary indexes 69 on the member node are fragments of secondary indexes in this database fragment. Each secondary index has an identifier assigned in the database configuration 46 (on the coordinating node) and 66 (on the participating node) and used in client requests. The identifier selects the desired secondary index. The secondary index is a set of objects ordered by the values of one or several fields. The fields by which ordering occurs form a secondary key. If at any given moment in time no more than one object corresponds to the secondary key, the secondary key is considered unique. A non-unique secondary key can correspond to several objects. The secondary index is distributed among the DBMS nodes based on the database map 46 (on the coordinating node) and 66 (on the participating node) of the secondary index location map. The secondary index location map is similar to the primary index location map with the only difference being that the secondary index keys divided into ranges can consist of several fields of various types. The secondary index placement map can be made up so that several ranges of the same secondary index appear on one node. All ranges of the secondary index stored on one node make up a fragment of the secondary index. Physically, each fragment of the secondary index is implemented through well-known data specialists with a typical set of operations — an ordered dynamic array and / or binary tree. To ensure multi-version access to objects in the present implementation of the invention, revisions of objects together with storage cells of objects are included in the secondary index. A unique secondary key in such a data structure can correspond to several revisions of the same object. Moreover, the uniqueness of the secondary key is ensured for any given timestamp at the level of object storage cells.
Ссылочные индексы 71 на узле-участнике - это логические упорядочивания ссылок в списковых ссылочных полях объектов. Упорядочивание выполняется в соответствии со значениями одного или нескольких скалярных полей объектов, адресуемых ссылками. Например, представим, что в базе данных некоторой социальной сети объект класса Пользователь содержит списковое ссылочное поле Группы пользователя. Ссылочный индекс позволяет упорядочить в этом поле ссылки на объекты класса Группа по значению поля Название группы. В терминах реляционных баз данных ссылочный индекс соответствует вторичному индексу для таблицы отношений между сущностями. У каждого ссылочного индекса существует идентификатор, назначаемый в конфигурации базы данных 46 (на узле-координаторе) и 66 (на узле-участнике) и используемый в запросах клиентов.The reference indices 71 on the member node are logical ordering of links in list object reference fields. Ordering is performed in accordance with the values of one or more scalar fields of objects addressed by links. For example, suppose an object of the User class contains a list link field of a User group in a database of some social network. The reference index allows you to arrange in this field links to objects of the Group class by the value of the Group name field. In terms of relational databases, a reference index corresponds to a secondary index for a table of relationships between entities. Each reference index has an identifier assigned in the database configuration 46 (on the coordinating node) and 66 (on the participating node) and used in client requests.
Постоянное хранилище 72 на узле-участнике представляет собой средство сохранения (сериализации) объектов фрагмента базы данных в один или несколько файлов на внешний носитель данных, например на жесткий диск, а также средство загрузки (десериализации) объектов из этих файлов в оперативную память. Сохранение объектов в постоянное хранилище происходит периодически. Момент сохранения может быть выбран разным: фиксация транзакции, сборка мусора в базе данных, явный запрос пользователя на сохранение объектов в постоянном хранилище. Загрузка объектов из постоянного хранилища выполняется во время запуска узла СУБД, а также при перезагрузке узла, что эквивалентно сценарию запуска узла. К постоянному хранилищу предъявляются требования быстрой последовательнойPermanent storage 72 on a participating node is a means of storing (serializing) objects of a database fragment into one or more files on an external data medium, such as a hard disk, as well as a means of loading (deserializing) objects from these files into RAM. Saving objects to persistent storage occurs periodically. The moment of saving can be chosen in different ways: fixing the transaction, garbage collection in the database, an explicit request from the user to save objects in the permanent storage. Downloading objects from persistent storage is performed during the launch of the DBMS node, as well as during the reboot of the node, which is equivalent to the node launch scenario. Permanent storage requirements are fast sequential
- 8 027808 записи данных на внешний носитель и быстрого последовательного чтения данных с внешнего носителя. В реализации постоянного хранилища не требуются громоздкие средства виртуализации и проецирования файлов в оперативную память, поскольку объекты базы данных не вытесняются из оперативной памяти на внешний носитель, всегда присутствуют в памяти и сохраняются на внешний носитель лишь для сохранности и перезапуска узлов.- 8 027808 write data to an external medium and quickly sequentially read data from an external medium. The implementation of persistent storage does not require cumbersome means of virtualization and projecting files into RAM, since database objects are not ejected from RAM to external media, they are always present in memory and stored on external media only for saving and restarting nodes.
Файловое хранилище 73 на узле-участнике обеспечивает хранение данных типа ВЬОВ (от англ. Βίпагу Ьагде ОВ)ес1 - двоичный большой объект) в файловой системе на внешних носителях узлов СУБД, например на жестких дисках. В настоящем изобретении набор данных типа ВЬОВ представляется в виде особого файлового объекта базы данных. Файловые объекты, как и обычные объекты, могут иметь скалярные и ссылочные поля для хранения данных, а также принимать участие в транзакциях наравне с обычными объектами. Одним из предопределенных скалярных полей файлового объекта является имя логического файла в базе данных. По этому полю построен вторичный индекс с уникальным ключом, чтобы можно было выполнять поиск файловых объектов по имени. В отличие от других объектов каждый файловый объект имеет логическое поле для хранения своего набора данных типа ВЬОВ. Набор данных хранится не в оперативной памяти, а на внешнем носителе, обычно на файловой системе. С набором данных файлового объекта предусмотрены следующие операции: Чтение целиком, Чтение блока, Добавление блока в конец, Перезапись целиком. Различные реализации изобретения могут дополнительно поддерживать операцию Перезапись блока, но это серьезно усложняет управление ревизиями файлового объекта и замедляет совместный доступ к набору данных со стороны разных клиентов из-за необходимости использовать дополнительные блокировки.The file storage 73 on the participating node provides storage of data of the type BOB (from English Βίpagu lagde OB) uc1 is a binary large object) in the file system on external media of the DBMS nodes, for example, on hard disks. In the present invention, a BOB-type data set is represented as a particular database file object. File objects, like ordinary objects, can have scalar and reference fields for storing data, as well as participate in transactions along with ordinary objects. One of the predefined scalar fields of a file object is the name of a logical file in the database. A secondary index with a unique key is built on this field so that you can search for file objects by name. Unlike other objects, each file object has a logical field for storing its own data set of the BOB type. The data set is not stored in RAM, but on an external medium, usually on a file system. The following operations are provided with a data set of a file object: Read whole, Read a block, Add a block to the end, Overwrite the whole. Various implementations of the invention may additionally support the operation Overwrite the block, but this seriously complicates the management of revisions of the file object and slows down the shared access to the data set from different clients due to the need to use additional locks.
Набор данных типа ВЬОВ каждого файлового объекта (данные файла) распределяется среди узлов СУБД на основании заданного в конфигурации базы данных 46 (на узле-координаторе) и 66 (на узлеучастнике) правила размещения файлов в файловом хранилище. Правило определяет набор узлов, среди которых происходит размещение файлов, и размер блока непрерывной записи на один узел. Запись файловых данных на узлы из набора происходит блоками по кругу с учетом заданного в конфигурации базы данных уровня резервирования (если он больше нуля, один и тот же блок данных попадает на несколько смежных узлов). В момент записи строится или обновляется карта размещения файла. Она сохраняется в одном из внутренних системных полей ревизии файлового объекта. Карта размещения файла используется для чтения данных файла. По ней для любого участка файла можно определить местоположение блоков этого участка на узлах базы данных.A data set of type BOB of each file object (file data) is distributed among DBMS nodes based on the rules for placing files in file storage specified in the database configuration 46 (at the coordinator node) and 66 (at the participant node). The rule defines the set of nodes among which the files are placed, and the size of the continuous recording block per node. File data is written to the nodes in the set in blocks in a circle taking into account the backup level specified in the database configuration (if it is greater than zero, the same data block gets to several adjacent nodes). At the time of recording, a file location map is built or updated. It is stored in one of the internal system fields of the file object revision. A file allocation map is used to read file data. Using it, for any section of the file, you can determine the location of blocks of this section on the database nodes.
Структуры данных.Data structures.
На фиг. 4 изображен пример графа объектов. Объекты содержат ссылки друг на друга и распределены некоторым образом среди узлов базы данных. В примере предполагается, что объекты принадлежат двум разным классам: и (от англ. Икег - пользователь) и С (от англ. Сгоир - группа) и имеют соответственно обозначения И1, И2, ИЗ и С1, С2, С3. Объекты класса и ссылаются на объекты класса С. Так объект И1 ссылается на объекты С1 и С2, объект И2 ссылается на объекты С2 и СЗ, а объект ИЗ ссылается на объекты С1 и СЗ. Эти ссылки с точки зрения объектов класса И считаются прямыми. Они показаны на фиг. 4 сплошными линиями. Прямым ссылкам соответствуют обратные ссылки: из объектов С1 и С2 на объект И1, из объектов С2 и СЗ на объект И2 и из объектов С1 и СЗ на объект ИЗ. Обратные ссылки показаны на фиг. 4 пунктирными линиями. Отметим, что для объектов класса С прямые ссылки показаны пунктирными линиями, а обратные ссылки - сплошными линиями. В примере предполагается, что согласно карты размещения первичного индекса объекты И1 и И2 оказались на узле N1, объекты С1 и С2 оказались на узле N2, а объекты ИЗ и СЗ оказались на узле №. При этом ссылки между объектами ИЗ и СЗ связывают объекты одного узла, а остальные ссылки связывают объекты разных узлов.In FIG. 4 shows an example of an object graph. Objects contain links to each other and are distributed in some way among database nodes. In the example, it is assumed that the objects belong to two different classes: and (from the English. Ikeg - user) and C (from the English. Sgoir - group) and are respectively designated I1, I2, IZ and C1, C2, C3. Class objects refer to objects of class C. So object I1 refers to objects C1 and C2, object I2 refers to objects C2 and C3, and object IZ refers to objects C1 and C3. These links are considered direct from the point of view of objects of class AND. They are shown in FIG. 4 solid lines. Direct links correspond to backlinks: from objects C1 and C2 to object I1, from objects C2 and SZ to object I2 and from objects C1 and C3 to object IZ. Backlinks are shown in FIG. 4 dashed lines. Note that for objects of class C, direct links are shown by dashed lines, and backlinks are shown by solid lines. In the example, it is assumed that, according to the primary index allocation map, objects I1 and I2 were at node N1, objects C1 and C2 were at node N2, and objects IZ and SZ were at node No. At the same time, links between objects from IZ and SZ connect objects of one node, and the remaining links connect objects of different nodes.
На фиг. 5 для вышеуказанного примера показан детализированный способ хранения объектов и ссылок. На узле N1 хранятся объекты И1 и И2, на узле N2 хранятся объекты С1 и С2, на узле № хранятся объекты ИЗ и СЗ. Названные объекты распределены среди узлов в соответствии со значением своего первичного ключа и картой размещения первичного индекса. Объекты И1, И2, ИЗ, С1, С2, СЗ хранят значения скалярных полей. В каждом объекте ссылки на другие объекты заменены ссылками на узлы, с которых другие объекты можно получить по первичному ключу ссылающегося на них объекта. Для этого узлы содержат вспомогательные объекты, помеченные символом * и предназначенные для хранения обратных ссылок на свои основные объекты. Вспомогательные объекты примера: И1*, И2*, ИЗ*, С1*, С2*, СЗ*.In FIG. 5, for the above example, a detailed method of storing objects and links is shown. Objects I1 and I2 are stored on node N1, objects C1 and C2 are stored on node N2, objects IZ and SZ are stored on node No. The named objects are distributed among the nodes in accordance with the value of their primary key and the primary index allocation map. Objects I1, I2, IZ, C1, C2, SZ store the values of scalar fields. In each object, links to other objects are replaced by links to nodes from which other objects can be obtained by the primary key of the object referencing them. To do this, the nodes contain auxiliary objects marked with * and designed to store backlinks to their main objects. Auxiliary objects of the example: I1 *, I2 *, IZ *, C1 *, C2 *, SZ *.
Объекты И1, И2, ИЗ, С1, С2, СЗ имеют первичные ключи соответственно КИ1, КИ2, КИЗ, КС1, КС2, КСЗ, по которым их можно отыскать в первичном индексе. Кроме скалярных полей эти объекты содержат некоторое списковое ссылочное поле, показывающее, как организовано хранение ссылок. Для объектов класса И это поле И^С, а для объектов класса С поле С^И. В терминах некоторой гипотетической социальной сети, включающей классы Пользователь и Группа, поле И^С соответствует отношению Группы пользователя, а поле С^И - отношению Члены группы.Objects I1, I2, IZ, C1, C2, SZ have primary keys, respectively, KI1, KI2, KIZ, KS1, KS2, KSZ, by which they can be found in the primary index. In addition to scalar fields, these objects contain some list link field showing how storage of links is organized. For objects of class And this is a field And ^ C, and for objects of class C a field C ^ And. In terms of a hypothetical social network that includes the classes User and Group, the field I ^ C corresponds to the relation of the User Group, and the field C ^ I to the relation of the Members of the group.
В объектах И1, И2, ИЗ в поле И^С хранятся ссылки на соответствующие узлы, где размещены объекты С1, С2, СЗ. В частности, в объекте И1 в поле И^С хранится ссылка И1^№ на узел N2, в объ- 9 027808 екте И2 в поле И^С хранятся ссылки υ2^Ν2 и υ2ΑΝ3 на узлы N2 и N3, а в объекте ИЗ в поле И^С хранятся ссылки υ3ΑΝ2 и υ3ΑΝ3 на узлы N2 и N3. Аналогично в объектах С1, С2, СЗ в поле С^И хранятся ссылки на соответствующие узлы, где размещены объекты С1, С2, С3. В частности, в объекте С1 в поле С^И хранятся ссылки С1 ^>N1 и С1 ^N3 на узлы N1 и N3, в объекте С2 в поле С^И хранится ссылка С2^Ш на узел N1, а в объекте С3 в поле С^И хранятся ссылки С3^Ш и С3 ^N3 на узлы N1 и N3. Таким образом, прямые ссылки на объекты заменены в объектах И1, И2, И3, С1, С2, С3 ссылками на узлы.In the objects I1, I2, IZ, the field I ^ C stores links to the corresponding nodes where the objects C1, C2, C3 are located. In particular, in the object I1 in the field I ^ C the reference I1 ^ No. to the node N2 is stored, in the object I2 C in the field I ^ C the links υ2 ^ Ν2 and υ2ΑΝ3 to the nodes N2 and N3 are stored, and in the object IZ to field And ^ C stored links υ3ΑΝ2 and υ3ΑΝ3 to the nodes N2 and N3. Similarly, in the objects C1, C2, C3 in the field C ^ And links are stored to the corresponding nodes where the objects C1, C2, C3 are located. In particular, in the object С1 in the field С ^ И the links С1 ^> N1 and С1 ^ N3 are stored to the nodes N1 and N3, in the object С2 in the field С ^ И the reference С2 ^ Ш is stored to the node N1, and in the object С3 in the field С3 C ^ And references C3 ^ W and C3 ^ N3 to the nodes N1 and N3 are stored. Thus, direct references to objects in objects I1, I2, I3, C1, C2, C3 are replaced by links to nodes.
Для кодирования ссылок на узлы можно использовать номера, имена или идентификаторы узлов. Однако на практике лучше использовать косвенную адресацию через номера диапазонов, на которые разбит первичный индекс. Диапазоны первичных ключей ставятся в соответствие узлам, образуя карту размещения объектов среди узлов. Все объекты, включенные в один и тот же диапазон по значению своего первичного ключа, размещаются таким образом на одном и том же узле. Вместо ссылок на узлы в ссылочном поле записываются номера соответствующих диапазонов, на которые разделяется все множество потенциальных значений первичного ключа. Количество диапазонов может существенно превышать количество узлов и обеспечивает необходимую гибкость в управлении размещением объектов. Отметим, что даже если прямые ссылки кодируются номерами диапазонов, последние в конечном счете отображаются в узлы во время работы системы, что использовано в качестве допущения на фиг. 5.To encode links to nodes, you can use the numbers, names or identifiers of nodes. However, in practice, it is better to use indirect addressing through the numbers of the ranges into which the primary index is divided. Primary key ranges are mapped to nodes, forming a map of the placement of objects among nodes. All objects included in the same range by the value of their primary key are thus placed on the same node. Instead of links to nodes, the numbers of the corresponding ranges are written in the reference field, into which the whole set of potential values of the primary key is divided. The number of ranges can significantly exceed the number of nodes and provides the necessary flexibility in managing the placement of objects. Note that even if direct links are encoded by range numbers, the latter are ultimately mapped to nodes during system operation, which is used as an assumption in FIG. 5.
Вспомогательные объекты И1*, И2*, И3*, С1*, С2*, С3* имеют первичные ключи соответственно КИ1, КИ2, КИ3, КС1, КС2, КС3, по которым их можно отыскать в первичном индексе. Эти объекты содержат списковое ссылочное поле, показывающее, как организовано хранение обратных ссылок. Для объектов И1*, И2*, И3* это поле И^С, а для объектов С1*, С2*, С3* - поле С^И, что в терминах упомянутой выше гипотетической социальной сети соответствует отношениям Группы пользователя и Члены группы.Auxiliary objects I1 *, I2 *, I3 *, C1 *, C2 *, C3 * have primary keys KI1, KI2, KI3, KS1, KS2, KS3, respectively, by which they can be found in the primary index. These objects contain a list link field that shows how backlink storage is organized. For the objects I1 *, I2 *, I3 * this is the field I ^ C, and for the objects C1 *, C2 *, C3 * it is the field C ^ I, which in terms of the hypothetical social network mentioned above corresponds to the relations of the User Group and the Members of the group.
На каждом узле, где размещены объекты И1, И2, И3, хранятся вспомогательные объекты С1*, С2*, С3*, содержащие обратные ссылки основных объектов в пределах этого узла. Аналогично на каждом узле, куда распределены объекты С1, С2, С3, хранятся вспомогательные объекты И1*, И2*, И3*, содержащие обратные ссылки основных объектов в пределах этого узла.At each node where objects I1, I2, I3 are located, auxiliary objects C1 *, C2 *, C3 * are stored, containing backlinks of the main objects within this node. Similarly, at each node where the objects C1, C2, C3 are distributed, auxiliary objects I1 *, I2 *, I3 * are stored, containing backlinks of the main objects within this node.
В частности, на узле N1 вспомогательный объект С1* содержит в поле С^И ссылку С1^И1 на объект И1. На этом же узле вспомогательный объект С2* содержит в поле С^И ссылки С2^И1 и С2^И2 на объекты И1 и И2. На этом же узле вспомогательный объект С3* содержит в поле С^И ссылку С3^И2 на объект И2.In particular, on the node N1, the auxiliary object C1 * contains in the field C ^ AND a link C1 ^ I1 to the object I1. At the same node, the auxiliary object C2 * contains in the field C ^ I links C2 ^ I1 and C2 ^ I2 to the objects I1 and I2. At the same node, the auxiliary object C3 * contains in the field C ^ And a link C3 ^ I2 to the object I2.
На узле N2 вспомогательный объект И1* содержит в поле И^С ссылки И1^С1 и И1^С2 на объекты С1 и С2. На этом же узле вспомогательный объект И2* содержит в поле И^С ссылку И2^С2 на объект С2. На этом же узле вспомогательный объект И3* содержит в поле И^С ссылку И3^С1 на объект И1.At node N2, the auxiliary object I1 * contains in the field I ^ C references I1 ^ C1 and I1 ^ C2 to objects C1 and C2. At the same node, the auxiliary object I2 * contains in the field I ^ C a link I2 ^ C2 to the object C2. At the same node, the auxiliary object I3 * contains in the field I ^ C a link I3 ^ C1 to the object I1.
На узле N3 вспомогательный объект С1* содержит в поле С^И ссылку С1^И3 на объект И3. На этом же узле вспомогательный объект С3* содержит в поле С^И ссылку С3^И3 на объект И3. На этом же узле вспомогательный объект И2* содержит в поле И^С ссылку И2^С3 на объект С3. На этом же узле вспомогательный объект И3* содержит в поле И^С ссылку И3^С3 на объект С3.At node N3, the auxiliary object C1 * contains in the field C ^ AND a link C1 ^ I3 to object I3. At the same node, the auxiliary object C3 * contains in the field C ^ AND a link C3 ^ I3 to the object I3. At the same node, the auxiliary object I2 * contains in the field I ^ C a link I2 ^ C3 to the object C3. At the same node, the auxiliary object I3 * contains in the field I ^ C a link I3 ^ C3 to the object C3.
В предпочтительном варианте осуществления изобретения способ хранения объектов и ссылок дополнен средствами управления конкурентным доступом на основе механизма многоверсионности МУСС. Согласно уточненной структуре данных объект заменяется ячейкой хранения списка ревизий объекта. С каждой ревизией ассоциирована метка времени, соответствующая моменту фиксации транзакции, в рамках которой была создана эта ревизия. Метка времени используется для фильтрации видимых клиенту изменений данных. Читающая транзакция выбирает из списка новейшую ревизию, в которой временная метка не превышает временную метку читающей транзакции. Старые ревизии, с которыми уже не могут работать клиенты, периодически удаляются из списка и утилизируются сборщиком мусора базы данных.In a preferred embodiment of the invention, the method for storing objects and links is supplemented by competitive access control tools based on the multi-version mechanism of the ICSS. According to the refined data structure, the object is replaced by the storage cell of the list of revisions of the object. Each revision is associated with a timestamp corresponding to the moment of committing the transaction within which this revision was created. The time stamp is used to filter data changes that are visible to the client. The reader transaction selects the latest revision from the list in which the timestamp does not exceed the timestamp of the reader transaction. Old revisions that clients can no longer work with are periodically removed from the list and disposed of by the database garbage collector.
Дополненные структуры данных, необходимые для обеспечения работы механизма многоверсионности, показаны на фиг. 6 как расширения обычного объекта И1 и вспомогательного объекта С1* из фиг. 5 до уровня представления ячеек хранения объектов и списка ревизий.The augmented data structures necessary to ensure the operation of the multi-version mechanism are shown in FIG. 6 as extensions of the ordinary object I1 and the auxiliary object C1 * of FIG. 5 to the level of representation of object storage cells and revision list.
Объект И1 на узле N1 представлен в виде ячейки хранения НИ1, в которой ссылка О^И1В адресует связный список ревизий объекта. Первой ревизией в списке хранится самая новая ревизия И1В, созданная в рамках транзакции Т2. Ревизия содержит первичный ключ КИ1 (общий для всех ревизий объекта), ссылку ТАГ2 на транзакцию Т2, ссылку Р^И1А на предыдущую ревизию И1А, обратную ссылку Н^НИ 1 на ячейку хранения НИ 1 (через нее можно добраться до любой ревизии), значения хранимых в ревизии скалярных полей РИ 1В и значения хранимых в ревизии ссылочных полей, из которых на фиг. 6 показано лишь поле И^С со ссылкой И1^№. Метка времени ревизии И1В хранится в транзакции Т2 в поле ТСШ. Предыдущая ревизия И1А содержит первичный ключ КИ1 (такой же как и в ревизии И1В), ссылку ТАГ1 на транзакцию Т1 (в рамках которой ревизия была создана), пустую ссылку РА№Ъ наObject I1 at node N1 is represented as storage cell NI1, in which the link O ^ I1B addresses a linked list of revisions of the object. The first revision on the list stores the latest revision, I1B, created as part of transaction T2. The revision contains the primary key KI1 (common for all revisions of the object), a TAG2 link to transaction T2, a link P ^ I1A to the previous revision I1A, a backward link H ^ NI 1 to the storage cell NI 1 (through it you can get to any revision), values the scalar fields RI 1B stored in the audit and the values of the reference fields stored in the audit, of which FIG. 6 shows only the field I ^ C with reference I1 ^ No. The I1B revision timestamp is stored in transaction T2 in the TSh field. The previous revision I1A contains the primary key KI1 (the same as in revision I1B), the TAG1 link to transaction T1 (within the framework of which the revision was created), an empty link to
- 10 027808 предыдущую ревизию (предыдущая ревизия отсутствует), обратную ссылку Н^НИ 1 на ячейку хранения Ни1, значения хранимых в ревизии скалярных полей РШЛ и значения хранимых в ревизии ссылочных полей, из которых на фиг. 6 показано лишь поле И^О без ссылок.- 10 027808 previous revision (previous revision is absent), backward link H ^ NI 1 to storage cell Ni1, the values of the RFL scalar fields stored in the revision and the values of the reference fields stored in the revision, of which FIG. 6 shows only the field I ^ O without links.
Вспомогательный объект О1* представлен в виде ячейки хранения НО1*, в которой ссылка О^О1*А адресует единственную ревизию О1*А (в примере предполагается, что у объекта О1* существует лишь одна ревизия). Ревизия О1*А содержит первичный ключ КО1, ссылку Т^Т2 на транзакцию Т2 (в рамках которой ревизия была создана), пустую ссылку Р^Ы1Ь на предыдущую ревизию (предыдущая ревизия отсутствует), обратную ссылку Н^НО1* на ячейку хранения НО1*, значения хранимых в ревизии ссылочных полей, из которых показано лишь поле О^И со ссылкой 01^-НШ.The auxiliary object O1 * is represented as a storage cell HO1 *, in which the link O ^ O1 * A addresses a single revision O1 * A (in the example, it is assumed that the object O1 * has only one revision). Revision O1 * A contains the primary key KO1, a link T ^ T2 to transaction T2 (within the framework of which the revision was created), an empty link P ^ L1b to the previous revision (no previous revision), a reverse link Н ^ НО1 * to the storage cell НО1 * , the values of reference fields stored in the revision, of which only the O ^ And field is shown with the link 01 ^ -NS.
Показанная на фиг. 6 структура хранения ревизий объектов предполагает, что временные метки ревизий хранятся не в самих ревизиях, а в объектах транзакций, в частности Т1 и Т2. Объект транзакции впервые создается на узле-координаторе и дублируется на каждом узле-участнике, где в рамках транзакции обновляются объекты. Объект транзакции идентифицируется временной меткой, например транзакция Т1 идентифицируется временной меткой ΤΟΝ1, транзакция Т2 идентифицируется временной меткой ΤΟΝ2. На фиг. 6 считается, что транзакция Т2 выполнена после транзакции Т1 и временная метка ТСШ больше временной метки ТСШ. Каждый объект транзакции содержит список ссылок Т^Н на ячейки хранения объектов, обновляемых на узле в рамках транзакции. На фиг. 6 предполагается, что в транзакции Т1 на узле N1 обновился лишь объект И1, поэтому объект Т1 содержит в поле Т^Н единственную ссылку Т1^НИ1 на ячейку хранения НИ1. В транзакции Т2 на узле N1 обновились два объекта - И1 и О1*, поэтому объект Т2 содержит в поле Т^Н ссылку Т1^НИ1 на ячейку хранения НИ1 и ссылку Т1^НО1* на ячейку хранения НО1*.Shown in FIG. 6, the structure of storing revisions of objects suggests that revision timestamps are not stored in revisions themselves, but in transaction objects, in particular T1 and T2. A transaction object is first created on the coordinator node and duplicated on each participating node, where objects are updated within the transaction. A transaction object is identified by a timestamp, for example, transaction T1 is identified by a timestamp ΤΟΝ1, transaction T2 is identified by a timestamp ΤΟΝ2. In FIG. 6 it is believed that transaction T2 is completed after transaction T1 and the timestamp of the TSH is greater than the timestamp of the TSH. Each transaction object contains a list of T ^ H links to storage cells of objects updated on the node as part of the transaction. In FIG. 6 it is assumed that in transaction T1 on node N1 only the I1 object was updated, therefore the object T1 contains in the field T ^ H a single link T1 ^ HI1 to the storage cell HI1. In transaction T2, two objects were updated on node N1 - I1 and O1 *, therefore, object T2 contains in the field T ^ H a link T1 ^ HI1 to the storage cell HI1 and a link T1 ^ HO1 * to the storage cell HHO1 *.
Показанная на фиг. 6 структура хранения ревизий объектов И1 и О1* может быть расширена до любого количества ревизий, объектов, транзакций и узлов путем обычного повторения элементов.Shown in FIG. 6, the storage structure of revisions of objects I1 and O1 * can be expanded to any number of revisions, objects, transactions, and nodes by the usual repetition of elements.
На фиг. 7 показана схема, позволяющая понять предложенный в изобретении и реализованный в системе способ размещения объектов среди узлов базы данных. Генератор ключей 50 содержит внутренний беззнаковый целочисленный счетчик 80. Ширина ячейки счетчика в предпочтительном варианте осуществления изобретения составляет 64 бита или больше. Часть ячейки в диапазоне битов от О до В атомарно наращивается на единицу при каждом обращении к генератору ключей 50 за новым значением. Часть ячейки в диапазоне битов от С до О отведена для номера узла. В них генератор ключей 50 вписывает один и тот же уникальный номер своего узла. Благодаря этому обеспечивается уникальность выдаваемых генератором числовых значений. Числовое значение счетчика 80 преобразуется в беззнаковое числовое значение первичного ключа 81 следующим образом. Часть битов от А до В в счетчике 80 симметрично отображается таким образом, что меняются местами биты А и В, биты А плюс один и В минус один, биты А плюс два и В минус два и так далее до симметричной перестановки всех указанных битов, часть битов от О до А в счетчике 80 не участвуют в симметричной перестановке. Получаемый в результате такой генерации первичный ключ 81 оказывается уникальным в базе данных, на большой выборке равномерно распределен в диапазоне своих возможных значений и на малой выборке сгруппирован с некоторым количеством других последовательно выданных первичных ключей. На этом свойстве первичного ключа основан способ размещения адресуемого ключом объекта на узлах базы данных - значение первичного ключа 81 транслируется по карте размещения первичного индекса 82 в один из узлов размещения объекта.In FIG. 7 shows a diagram that allows one to understand the method of placing objects among database nodes proposed in the invention and implemented in the system. The key generator 50 comprises an internal unsigned integer counter 80. The counter cell width in a preferred embodiment of the invention is 64 bits or more. A part of the cell in the range of bits from O to B is atomically incremented by one each time the key generator 50 is accessed for a new value. Part of the cell in the range of bits from C to O is reserved for the node number. In them, the key generator 50 enters the same unique number of its node. This ensures the uniqueness of the numerical values issued by the generator. The numerical value of the counter 80 is converted to the unsigned numerical value of the primary key 81 as follows. Part of bits A to B in counter 80 is symmetrically displayed in such a way that bits A and B, bits A plus one and B minus one, bits A plus two and B minus two, and so on, until all bits are symmetrically swapped, part bits from O to A in the counter 80 are not involved in symmetric permutation. The primary key 81 resulting from this generation is unique in the database, evenly distributed in the range of its possible values on a large sample and grouped with a number of other sequentially issued primary keys on a small sample. The method of placing the object addressed by the key on the database nodes is based on this property of the primary key — the value of the primary key 81 is translated on the primary index 82 allocation map to one of the object's nodes.
Карта размещения первичного индекса 82 может включать несколько распределений объектов среди узлов базы данных, из которых последнее по времени создания распределение применяется для размещения на узлах вновь создаваемых объектов, а все остальные распределения являются историческими и применяются для определения местоположения созданных в прошлом объектов. Например, на фиг. 7 показаны три распределения: распределение объектов 83, распределение объектов 84 и последнее текущее распределение объектов 85. Каждое новое распределение объектов в карте размещения первичного индекса создается администратором базы данных по необходимости, например при добавлении новых узлов-участников, на которых планируется размещение первичного индекса.The map of the primary index 82 may include several object distributions among database nodes, of which the most recent distribution is used to place newly created objects on the nodes, and all other distributions are historical and are used to determine the location of objects created in the past. For example, in FIG. Figure 7 shows three distributions: the distribution of objects 83, the distribution of objects 84 and the last current distribution of objects 85. Each new distribution of objects in the primary index allocation map is created by the database administrator as necessary, for example, when adding new member nodes on which the primary index is planned to be placed.
Распределение объектов состоит из набора неперекрывающихся диапазонов беззнаковых числовых значений первичного ключа, от минимального нулевого значения до максимально возможного значения МАХ. Для каждого диапазона указывается список узлов, на которые сохраняются объекты с первичными ключами из данного диапазона. Количество узлов в диапазоне зависит от заданного в конфигурации базы данных уровня резервирования. Если уровень резервирования равен нулю (режим работы без резервирования), список узлов в диапазоне состоит из одного узла. Если уровень резервирования равен единице (режим с одним горячим резервом), список узлов в диапазоне состоит из двух узлов. Если уровень резервирования равен двум (режим с двумя горячими резервами), список узлов в диапазоне состоит из трех узлов. Уровень резервирования может быть сколь угодно большим. В предпочтительном варианте реализации изобретения он ограничен значением три (режим работы с тремя горячими резервами) из экономических соображений. Пример карты размещения первичного индекса на фиг. 7 создан для режима работы с одним горячим резервом каждого узла, расположенным на соседнем узле, причем в распре- 11 027808 делении 83 заданы три равновеликих диапазона на трех узлах, в распределении 84 заданы два равновеликих диапазона на двух узлах, в распределении 85 заданы пять равновеликих диапазонов на пяти узлах.The distribution of objects consists of a set of non-overlapping ranges of unsigned numerical values of the primary key, from the minimum zero value to the maximum possible MAX value. For each range, a list of nodes to which objects with primary keys from this range are stored is indicated. The number of nodes in the range depends on the backup level specified in the database configuration. If the redundancy level is zero (operation without redundancy), the list of nodes in the range consists of one node. If the reservation level is equal to one (single hot standby mode), the list of nodes in the range consists of two nodes. If the redundancy level is two (two hot standby mode), the list of nodes in the range consists of three nodes. The reservation level can be arbitrarily large. In a preferred embodiment, it is limited to three (operating mode with three hot reserves) for economic reasons. An example of a primary index allocation map in FIG. 7 is created for the operation mode with one hot reserve of each node located on the neighboring node, and in the distribution 11 027808 division 83 three equal ranges on three nodes are specified, in distribution 84 two equal equal ranges on two nodes are set, in distribution 85 five equal sizes are set ranges on five nodes.
Распределение объектов содержит начальное и конечное значения счетчика 80 генератора ключей, в диапазоне которых объектам выдавались или выдаются первичные ключи. Если числовое значение счетчика 80, полученное обратным преобразованием из первичного ключа 81 некоторого объекта, находится между этими значениями, то размещение данного объекта определяется данным распределением. В примере на фиг. 7 начальное и конечное значения счетчика 80 для распределения 83 равны нулю и одному миллиарду соответственно, начальное и конечное значения счетчика 80 для распределения 84 равны одному миллиарду плюс один и полутора миллиардам соответственно, начальное и конечное значения счетчика 80 для распределения 85 равны полутора миллиардам плюс один и максимально возможному значению МАХ счетчика 80. Для 64-битного счетчика значение МАХ равно двум в шестьдесят четвертой степени.The distribution of objects contains the initial and final values of the counter 80 of the key generator, in the range of which the objects were issued or issued primary keys. If the numerical value of the counter 80 obtained by the inverse transformation from the primary key 81 of a certain object is between these values, then the placement of this object is determined by this distribution. In the example of FIG. 7, the initial and final values of counter 80 for distribution 83 are zero and one billion, respectively, the initial and final values of counter 80 for distribution 84 are one billion plus one and a half billion, respectively, the initial and final values of counter 80 for distribution 85 are one and a half billion plus one and the maximum possible value of the MAX counter of 80. For a 64-bit counter, the value of MAX is two to sixty-fourth.
Когда администратор базы данных создает новое распределение для объектов первичного индекса, оно применяется лишь к новым объектам - в карте размещения первичного индекса создается новое распределение, в котором начальное значение счетчика 80 устанавливается на единицу больше максимального известного в базе данных значения и конечное значение счетчика 80 не ограничивается. При этом в предыдущем распределении объектов фиксируется конечное значение счетчика 80 на уровне максимального известного в базе данных значения (начальное значение не изменяется). В результате создается новое поколение объектов с новым размещением на узлах базы данных. Такой способ создания поколений размещения объектов предполагает, что значения счетчика 80 являются числовыми, выдаются объектам последовательно от меньших значений к большим и могут быть восстановлены из значений первичного ключа 81 симметричной перестановкой битов от В до А.When the database administrator creates a new distribution for primary index objects, it applies only to new objects - a new distribution is created in the primary index allocation map in which the initial value of counter 80 is set to one greater than the maximum value known in the database and the final value of counter 80 is not limited to. Moreover, in the previous distribution of objects, the final value of the counter 80 is fixed at the level of the maximum value known in the database (the initial value does not change). As a result, a new generation of objects is created with a new location on the database nodes. This method of creating generations of placement of objects assumes that the values of the counter 80 are numerical, are issued to objects sequentially from lower to larger values and can be restored from the values of the primary key 81 by symmetric permutation of bits from B to A.
В иных вариантах осуществления изобретения счетчик 80 и/или первичный ключ 81 могут быть данными любого типа, например строка текста, массив чисел, структура с полями т.д. Во всех вариантах осуществления изобретения к счетчику 80 и первичному ключу 81 предъявляются следующие требования: возможность работы со значениями как с наборами битов и фиксация битовой ширины.In other embodiments, the counter 80 and / or primary key 81 may be any type of data, for example a line of text, an array of numbers, a structure with fields, etc. In all embodiments of the invention, the following requirements are met for the counter 80 and the primary key 81: the ability to work with values as sets of bits and fix the bit width.
Методы обработки данных.Data processing methods.
В сильно распределенной системе сложно или невозможно обеспечить абсолютную синхронизацию времени всех клиентов системы и глобальную упорядоченность их транзакций. В настоящем изобретении каждый клиент существует в своем времени. Если необходимо обеспечить причинно-следственную связь между действиями каких-то клиентов, система умеет синхронизировать клиентов во времени. Это делается по запросу одного из синхронизируемых клиентов. С момента синхронизации клиент опять существует в своем времени.In a highly distributed system, it is difficult or impossible to ensure absolute time synchronization of all system customers and the global ordering of their transactions. In the present invention, each client exists in its time. If it is necessary to provide a causal relationship between the actions of some clients, the system can synchronize clients in time. This is done at the request of one of the synchronized clients. From the moment of synchronization, the client again exists in its time.
Управление временем в системе выполняется на уровне каждой отдельной базы данных и ее клиентов независимо от других баз данных.Time management in the system is performed at the level of each individual database and its clients, independently of other databases.
Каждый узел базы данных имеет свой отдельный счетчик времени, представляющий собой целое число большой разрядности. В рассматриваемом варианте изобретения это 64-битное целое число. Счетчик времени выдает по запросам метки времени, представляющие собой пару чисел: номер узла и значение счетчика времени для этого узла. Из двух меток времени та больше, у которой больше значение счетчика, а при равенстве счетчиков та метка времени больше, у которой больше номер узла. Две метки времени с одинаковыми значениями номера узла и счетчика времени считаются равными.Each database node has its own separate time counter, which is a large-sized integer. In the present embodiment, this is a 64-bit integer. The time counter provides, upon request, time stamps, which are a pair of numbers: the node number and the value of the time counter for this node. Of the two time stamps, the larger one has the larger counter value, and if the counters are equal, that time stamp is larger with the larger node number. Two timestamps with the same node number and time counter are considered equal.
В системе отсутствует единое синхронное для всех узлов время, каждый узел базы данных живет в своем относительном времени, а значение времени для всей системы представляется массивом временных меток собранных со всех узлов базы данных. Во время коммуникации узлов друг с другом выполняется синхронизация счетчиков времени взаимодействующих узлов, причем при синхронизации время всегда продвигается вперед. Для обеспечения синхронизации времени вместе с каждым сообщением передается текущая метка времени узла-отправителя. Продвижение счетчика времени узла базы данных выполняется также при каждом внутреннем событии узла, а именно при создании пишущей транзакции, при переводе транзакции в состояние готовности и при фиксации транзакции.There is no single synchronous time for all nodes in the system, each database node lives in its own relative time, and the time value for the entire system is represented by an array of timestamps collected from all database nodes. During the communication of the nodes with each other, the time counters of the interacting nodes are synchronized, and during synchronization, time always moves forward. To ensure time synchronization, the current time stamp of the sending node is transmitted with each message. The promotion of the time counter of the database node is also performed for each internal event of the node, namely when creating a writing transaction, when the transaction is put in a ready state and when the transaction is committed.
Клиент может обратиться с запросом к любому из узлов базы данных благодаря тому, что система не хранит состояние клиента, а понятие сессии отсутствует. Контекст подключения клиента к базе данных хранится на стороне клиента и передается вместе с каждым запросом к базе данных. Контекст подключения клиента, или просто контекст клиента, содержит данные аутентификации и метку времени. Метка времени в контексте клиента продвигается вперед при каждом обращении клиента к базе данных. Для пишущих транзакций метка времени клиента синхронизируется с меткой времени узла, а для читающих транзакций продвигается вперед ближе к метки времени узла. Такая логика обеспечивает согласованность данных с точки зрения произвольного клиента и по возможности бесконфликтное редактирование и чтение данных одновременно несколькими клиентами.The client can request any of the database nodes due to the fact that the system does not store the state of the client, and the concept of a session is absent. The context of client connection to the database is stored on the client side and transmitted along with each request to the database. The client connection context, or simply the client context, contains authentication data and a timestamp. The timestamp in the context of the client advances each time the client accesses the database. For writing transactions, the client’s time stamp is synchronized with the node’s time stamp, and for reading transactions, it moves forward closer to the node’s time stamp. This logic ensures data consistency from the point of view of an arbitrary client and, if possible, conflict-free editing and reading of data simultaneously by several clients.
При обращении клиента к узлу может оказаться, что время узла отстает от времени клиента, что свидетельствует о том, что свой последний запрос клиент выполнил к другому узлу, с которым данный узел синхронизироваться еще не успел. В этом случае время узла продвигается вперед к времени клиента, т.е. клиент по сути обеспечивает опосредованную синхронизацию времени узлов.When a client accesses a node, it may turn out that the time of the node is behind the time of the client, which indicates that the client has completed its last request to another node with which this node has not yet synchronized. In this case, the node time advances towards the client time, i.e. the client essentially provides indirect time synchronization of nodes.
- 12 027808- 12 027808
Таким образом каждый клиент работает с базой данных в своем относительном времени. Если некоторому клиенту необходимо прочитать данные, измененные другим клиентом, то для согласованного чтения правильных данных первому клиенту необходимо сначала согласовать свою метку времени с меткой времени второго клиента.Thus, each client works with the database in its relative time. If some client needs to read data modified by another client, then for the consistent reading of the correct data, the first client must first match its timestamp with the timestamp of the second client.
Специалистам в данной области должно быть очевидно, что такой способ управления временем в распределенной системе является усовершенствованием часов Лампорта. Первое усовершенствование заключается в том, что счетчик времени содержит номер узла, благодаря чему для всех значений счетчиков узлов определено отношение строгого порядка и, следовательно, все события в системе строго упорядочены. Второе усовершенствование заключается в том, что клиент не имеет своего счетчика времени, но при этом является переносчиком значений счетчиков времени, опосредовано участвуя в синхронизации времени узлов. Все это позволяет обеспечитесь согласованность данных при маршрутизации запросов клиента к разным узлам системы.It will be apparent to those skilled in the art that such a time management method in a distributed system is an improvement to Lamport watches. The first improvement is that the time counter contains a node number, due to which a strict order relation is determined for all values of the node counters and, therefore, all events in the system are strictly ordered. The second improvement is that the client does not have its own time counter, but at the same time it is a carrier of time counter values, indirectly participating in the time synchronization of nodes. All this allows for data consistency when routing client requests to different system nodes.
В предпочтительном варианте осуществления изобретения каждый запрос клиента выполняется как транзакция. Транзакциями управляет система, а механизм транзакций спрятан от клиентов. Транзакции делятся на читающие и пишущие. Читающие транзакции используются для выполнения запросов поиска и извлечения данных, а пишущие транзакции - для выполнения запросов сохранения данных.In a preferred embodiment, each client request is executed as a transaction. The system manages transactions, and the transaction mechanism is hidden from clients. Transactions are divided into reading and writing. Reading transactions are used to execute data retrieval and retrieval requests, and writing transactions are used to execute data storage queries.
Читающая транзакция создается ядром выполнения клиентских запросов 42 в менеджере транзакций 48 и удаляется сразу после выполнения запроса. При создании читающая транзакция получает метку времени, которая используется для извлечения зафиксированных к этому моменту времени ревизий объектов и пропуска более поздних ревизий. Значение метки времени для читающей транзакции выбирается так, чтобы оно было в диапазоне между меткой времени клиента и текущей меткой времени узла. Предполагается, что метка времени клиента не больше метки времени узла, в противном случае выполняется синхронизация времени узла с временем клиента, чтобы указанное предположение всегда было верно.A reader transaction is created by the client query engine 42 in transaction manager 48 and is deleted immediately after the request is executed. Upon creation, the reading transaction receives a timestamp, which is used to retrieve revisions of objects fixed at this point in time and to skip later revisions. The timestamp value for the reading transaction is selected so that it is in the range between the client's timestamp and the current node's timestamp. It is assumed that the client’s time stamp is not greater than the node’s time stamp; otherwise, the node’s time is synchronized with the client’s time, so that this assumption is always true.
В предпочтительном варианте осуществления изобретения каждый узел базы данных хранит значение метки времени, которое узел базы данных имел N секунд назад, где N - параметр конфигурации базы данных. Значение метки времени для читающей транзакции выбирается как максимум из значения метки времени клиента и значения метки времени узла N секунд назад. Таким образом, актуальность видимых клиентом данных отстает не более чем на N секунд от актуальных данных узла. Могут также использоваться другие, более адаптивные способы выбора метки времени для читающих транзакций.In a preferred embodiment, each database node stores a timestamp value that the database node had N seconds ago, where N is the database configuration parameter. The timestamp value for the reading transaction is selected as the maximum from the client's timestamp value and the node's timestamp value N seconds ago. Thus, the relevance of the data visible by the client is no more than N seconds behind the actual node data. Other, more adaptive ways to select a timestamp for reading transactions may also be used.
Пишущая транзакция создается ядром выполнения клиентских запросов 42 в менеджере транзакций 48, помещается в список активных транзакций и остается в нем после выполнения запроса. Для пишущих транзакций выполняется коллективная фиксация, поэтому пишущая транзакция остается в списке активных транзакций до тех пор, пока информация о ее фиксации или откате не распространится на все вовлеченные в транзакцию узлы, после чего транзакция утилизируется работающим в фоне процессом сборки мусора. Каждая пишущая транзакция имеет уникальный идентификатор, называемый ключом, по которому транзакцию можно быстро найти в списке активных транзакций. Для обеспечения уникальности ключи транзакции представляют собой временные метки, выдаваемые самостоятельно узломкоординатором, который вместе с выдачей очередного ключа продвигает свой счетчик времени. Кроме ключа пишущая транзакция хранит список номеров узлов, которые вовлечены в транзакцию. Этот список используется для адресной рассылки команд фиксации или отката транзакции, а также для выяснении состояния транзакции, если узел-координатор не смог выполнить рассылку команд фиксации или отката. После фиксации пишущая транзакция хранит также временную метку фиксации, которая используется читающими транзакциями для доступа к снимку базы данных на определенный момент времени, как было описано выше.A writing transaction is created by the client query execution engine 42 in transaction manager 48, placed in the list of active transactions and remains in it after the request is executed. Collective commit is performed for writing transactions, so the writing transaction remains in the list of active transactions until the information about its commit or rollback is distributed to all nodes involved in the transaction, after which the transaction is disposed of by the garbage collection process running in the background. Each writing transaction has a unique identifier, called a key, by which a transaction can be quickly found in the list of active transactions. To ensure uniqueness, transaction keys are timestamps issued independently by the coordinator node, which, together with the issuance of the next key, advances its time counter. In addition to the key, the writing transaction stores a list of node numbers that are involved in the transaction. This list is used to address the sending of commit or rollback commands, as well as to find out the status of a transaction if the coordinator node could not send out commit or rollback commands. After committing, the writing transaction also stores the commit timestamp, which is used by reading transactions to access the database snapshot at a specific point in time, as described above.
При выполнении запроса атрибуты пишущей транзакции, включая ключ транзакции и список вовлеченных в транзакцию узлов, передаются ядру выполнения внутренних запросов 74 каждого вовлеченного узла-участника. Ядром выполнения внутренних запросов 74 в менеджере транзакций 68 создается копия транзакции с указанными атрибутами, которая помещается в список активных транзакций. После выполнения запроса ядром выполнения внутренних запросов 74 транзакция переводится в состояние готовности к фиксации. В этом состоянии может произойти как фиксация, так и откат транзакции, что определяется результатами выполнения транзакции на других узлах. При переводе транзакции в состояние готовности вычисляется текущая временная метка узла базы данных, которая запоминается в атрибутах транзакции и возвращается ядру выполнения клиентских запросов 42 на узле-координаторе.When the request is executed, the attributes of the writing transaction, including the transaction key and the list of nodes involved in the transaction, are transferred to the internal query execution kernel 74 of each involved participant node. The core of the execution of internal queries 74 in the transaction manager 68 creates a copy of the transaction with the specified attributes, which is placed in the list of active transactions. After the query is completed by the internal query execution engine 74, the transaction is put into a state of readiness for commit. In this state, both commit and rollback of the transaction can occur, which is determined by the results of the transaction on other nodes. When a transaction is put in a ready state, the current timestamp of the database node is calculated, which is stored in the attributes of the transaction and returned to the kernel for executing client requests 42 at the coordinator node.
После получения успешных результатов выполнения транзакции с узлов-участников ядром выполнения клиентских запросов 42 транзакция переводится в состояние готовности на узле-координаторе, при этом вычисляется текущая временная метка узла базы данных, которая запоминается в атрибутах транзакции. Для всех временных меток, собранных с вовлеченных в транзакцию узлов, вычисляется максимальное значение, которое используется в качестве временной метки фиксации транзакции.After receiving the successful results of the transaction from the participating nodes, the kernel for executing client requests 42 puts the transaction in a ready state on the coordinating node, and the current timestamp of the database node is calculated, which is stored in the attributes of the transaction. For all timestamps collected from the nodes involved in the transaction, the maximum value is calculated, which is used as the timestamp of the transaction commit.
Фиксация транзакции сначала выполняется на узле-координаторе, после чего запрос на фиксацию на узлах-участниках ставится в специальную очередь и результат транзакции возвращается клиенту. Запрос на фиксацию содержит ключ транзакции, временную метку фиксации и список вовлеченных в транзакцию узлов. Очередь запросов на фиксацию транзакций обрабатывается параллельным процессом, ко- 13 027808 торый периодически выбирает накопившиеся запросы и в пакетном режиме отправляет команды фиксации узлам базы данных. Список узлов, которым рассылаются команды фиксации, формируется как объединение множеств всех узлов из всех накопившихся запросов. Откат транзакций выполняется аналогичным образом, только вместо команд фиксации узлам-участникам рассылаются команды отката. Таким образом, фиксация или откат транзакций на узлах-участниках происходит асинхронно в пакетном режиме, что существенно уменьшает для клиента задержку времени между посылкой запроса и получением ответа, а также снижает внутренний сетевой трафик системы. Этот подход выгодно отличается от двухфазного механизма фиксации.The transaction is committed first at the coordinator node, after which the commit request at the participating nodes is put in a special queue and the transaction result is returned to the client. A commit request contains a transaction key, a commit timestamp, and a list of nodes involved in the transaction. The queue of requests for committing transactions is processed by a parallel process, which periodically selects accumulated requests and sends batch commands to the database nodes in batch mode. The list of nodes to which commit commands are sent is formed as a union of the sets of all nodes from all accumulated requests. Transactions are rolled back in the same way, only rollback commands are sent to the participating nodes instead of commit commands. Thus, the commit or rollback of transactions on the participating nodes occurs asynchronously in batch mode, which significantly reduces the time delay for the client between sending a request and receiving a response, and also reduces the internal network traffic of the system. This approach compares favorably with the two-phase fixation mechanism.
При выполнении нескольких пишущих транзакций в тех случаях, когда транзакции одновременно обновляют несколько объектов, расположенных на нескольких узлах, может произойти конфликт транзакций. Поясним его на примере. Предположим, что транзакции Т1 и Т2 обновляют объекты А и В, расположенные на узлах N1 и N2 соответственно. Каждая из этих транзакций обновляет оба объекта. Сценарий может оказаться следующим. В один и тот же момент времени транзакция Т1 обновила объект А, а транзакция Т2 обновила объект В. В следующий момент времени транзакция Т1 пытается обновить объект В, который уже изменен транзакцией Т2 и еще не зафиксирован, а транзакция Т2 пытается обновить объект В, который изменен транзакцией Т1 и тоже еще не зафиксирован. Наблюдается конфликт транзакций. Если обе транзакции выполнят ожидание фиксации, возникнет бесконечная блокировка. Поэтому при обнаружении конфликта выполняется откат транзакции, и клиент получает результат с признаком конфликта. В предпочтительном варианте осуществления изобретения предпринимаются меры для преодоления конфликта. Клиент базы данных в автоматическом режиме пытается повторить запрос после небольшой задержки в надежде, что следующая попытка окажется бесконфликтной. После нескольких безуспешных попыток, количество которых определяется конфигурацией клиента, клиент сообщает о возникшем конфликте пользователю. Пользователь принимает решение продолжить попытки выполнить запрос или отложить действие до тех пор, пока другие клиенты не завершат работу с данными, ставшими причиной конфликта.When performing multiple write transactions in those cases when transactions simultaneously update several objects located on several nodes, a transaction conflict may occur. Let us illustrate it with an example. Assume that transactions T1 and T2 update objects A and B located at nodes N1 and N2, respectively. Each of these transactions updates both objects. The scenario may be as follows. At the same time, transaction T1 updated object A, and transaction T2 updated object B. At the next time, transaction T1 tries to update object B, which has already been changed by transaction T2 and has not yet been committed, and transaction T2 is trying to update object B, which Modified by transaction T1 and also not yet committed. There is a transaction conflict. If both transactions wait for a commit, an infinite lock will occur. Therefore, when a conflict is detected, the transaction is rolled back, and the client receives a result with a sign of conflict. In a preferred embodiment, measures are taken to overcome the conflict. The database client automatically tries to retry the request after a short delay in the hope that the next attempt will be conflict-free. After several unsuccessful attempts, the amount of which is determined by the configuration of the client, the client reports the conflict to the user. The user decides to continue trying to fulfill the request or to postpone the action until other clients finish working with the data that caused the conflict.
На случай отказа узла-координатора 40 или сбоя вычислительной сети узлов 24 при передаче команд фиксации или отката в менеджере транзакций 68 имеется очередь запросов на выяснение результатов транзакций, которые перешли в состояние готовности к фиксации, но по какой-то причине не были зафиксированы. Запросы в эту очередь помещаются менеджером транзакций 68 на узле-участнике вместе с переводом транзакции в состояние готовности к фиксации и непосредственно перед возвратом результата транзакции вызывающему ядру выполнения клиентских запросов на узле-координаторе. Очередь запросов на выяснение результатов транзакций обрабатывается параллельным процессом, который периодически выбирает накопившиеся запросы и в пакетном режиме отправляет их вовлеченным в транзакции узлам базы данных. Для каждой транзакции запрос отправляется сначала узлу-координатору, а потом узлам-участникам. Узел-координатор вычисляется среди вовлеченных в транзакцию узлов по значению ключа транзакции (ключ транзакции представляет собой метку времени с закодированным в ней номером узла-координатора). Если в результате опроса всех вовлеченных в транзакцию узлов обнаруживается, что на одном из узлов транзакция была зафиксирована или ей был сделан откат, то в такое же состояние фиксации или отката транзакция переводится на узле, выполняющем опрос. Если окончательное состояние транзакции после опроса всех вовлеченных в транзакцию узлов оказывается не определено, запрос на выяснение результата транзакции снова ставится в обрабатываемую очередь, чтобы через некоторое время попытка выяснить результат транзакции повторилась. Для оптимальной работы интервал времени между обслуживаниями очереди запросов на выяснение результатов транзакций должен быть значительно больше интервала времени между обслуживаниями очереди запросов на фиксацию и откат транзакций.In the event of a failure of the coordinator node 40 or a failure of the computing network of nodes 24 when transmitting commit or rollback commands, there is a queue of requests in transaction manager 68 for clarifying the results of transactions that have entered a state of readiness for commit, but for some reason have not been committed. Requests are placed in this queue by the transaction manager 68 on the participating node, together with the transaction being placed in a ready state for commit and immediately before the transaction result is returned to the calling kernel for executing client requests on the coordinating node. The queue of requests for clarifying the results of transactions is processed by a parallel process that periodically selects accumulated requests and sends them in batch mode to the database nodes involved in the transaction. For each transaction, the request is sent first to the coordinator node, and then to the participating nodes. The coordinator node is calculated among the nodes involved in the transaction by the value of the transaction key (the transaction key is a time stamp with the number of the coordinator node encoded in it). If, as a result of a survey of all nodes involved in a transaction, it is discovered that a transaction was committed on one of the nodes or was rolled back, then the transaction is transferred to the same commit or rollback state on the node performing the survey. If the final state of the transaction after polling all the nodes involved in the transaction is not determined, the request to find out the result of the transaction is again placed in the processed queue so that after some time the attempt to find out the result of the transaction is repeated. For optimal operation, the time interval between servicing the request queue for clarifying the results of transactions should be significantly larger than the time interval between servicing the request queue for committing and rolling back transactions.
Основываясь на изложенных выше структурах хранения объектов и ссылок (фиг. 5 и 6) и методе транзакционной работы с объектами, рассмотрим метод извлечения объектов из базы данных. Сделаем это на примере выполнения некоторого запроса на извлечение Пользователя И2 вместе со всеми Группами О, на которые Пользователь И2 ссылается через поле И^О. Блок-схема выполнения запроса показана на фиг. 8.Based on the above structures for storing objects and links (Figs. 5 and 6) and the method of transactional work with objects, we consider the method of extracting objects from the database. We will do this by the example of fulfilling some request to retrieve the I2 User along with all Groups O to which the I2 User refers through the I ^ O field. A block diagram of the execution of the request is shown in FIG. 8.
На шаге 90 ядро выполнения клиентских запросов 42 некоторого узла-координатора N4 принимает от клиента запрос вида Извлечь объекты, параметрами которого являются временная метка ΟΟΝ клиента, первичный ключ объекта КИ2, имена классов запрашиваемых объектов и и О, а также имя ссылочного поля О >0. через которое выбираются подчиненные объекты.At step 90, the kernel for executing client requests 42 of some coordinating node N4 receives a request from the client of the form Retrieve objects whose parameters are the client’s timestamp,, the primary key of the KI2 object, the class names of the requested objects and and O, as well as the name of the reference field O> 0 . through which subordinate objects are selected.
На шаге 91 менеджер транзакций 48 создает в списке активных транзакций читающую транзакцию Т с меткой времени ΤΟΝ. Значение временной метки выбирается так, чтобы она была не меньше временной метки клиента, но не больше временной метки узла. Метка времени ΤΟΝ используется для чтения зафиксированных к этому времени ревизий объектов и для отбрасывания более поздних изменений данных. На этом шаге фактически происходит продвижение логического времени клиента вперед, причем клиент немного отстает по времени от системы, что обеспечивает в большинстве случаев бесконфликтное чтение и редактирование данных. Величина отставания времени клиентов от времени системы можетIn step 91, the transaction manager 48 creates a reading transaction T with a time stamp ΤΟΝ in the list of active transactions. The timestamp value is selected so that it is not less than the client’s timestamp, but not more than the node’s timestamp. Timestamp ΤΟΝ is used to read revisions of objects fixed by this time and to discard later data changes. At this step, the client’s logical time is actually moving forward, and the client is slightly behind in time from the system, which in most cases ensures conflict-free reading and editing of data. The amount of client time lag from the system time may
- 14 027808 динамически корректироваться в зависимости от текущей загрузки системы.- 14 027808 dynamically adjusted depending on the current system load.
На шаге 92 ядро выполнения клиентских запросов 42 запрашивает ревизию объекта с первичным ключом КИ2 на момент времени ΤΟΝ. Для этого на основании значения первичного ключа КИ2 и карты размещения первичного индекса определяется узел, где находится объект. В рассматриваемом примере это узел N1. Далее на узел N1 передается запрос 93, содержащий временную метку ΤΟΝ и ключ КИ2.At step 92, the kernel for executing client requests 42 requests an audit of the object with the primary key KI2 at time ΤΟΝ. To do this, based on the value of the primary key KI2 and the primary index location map, the node where the object is located is determined. In this example, this is node N1. Next, a request 93 containing a time stamp ΤΟΝ and a key KI2 is transmitted to node N1.
На шаге 94 ядро выполнения внутренних запросов 74 узла N1 выбирает по первичному ключу КИ2 в первичном индексе 67 фрагмента базы данных 65 ячейку хранения объекта. В этой ячейке выбирается последняя зафиксированная ревизия объекта И2 на момент времени ΤΟΝ, допустим ревизия И2Л. Ревизия И2Л возвращается в ответе 95 ядру выполнения клиентских запросов 42 на узле N4.At step 94, the core of the execution of internal queries 74 of the N1 node selects the object storage cell by the primary key KI2 in the primary index 67 of the database fragment 65. In this cell, the last recorded revision of the I2 object at the time moment ΤΟΝ is selected, for example, the revision of I2L. The audit of IIL is returned in response 95 to the kernel for executing client requests 42 on node N4.
На шаге 96 ядро выполнения клиентских запросов 42 запрашивает подчиненные объекты класса С, на которые ссылается ревизия И2А. Для этого путем обращения к полю И^С ревизии И2А определяются узлы, где хранятся подчиненные объекты. В примере на фиг. 5 это узлы N2 и N3. Далее два подчиненных запроса 97 и 98 адресуются параллельно ядру выполнения внутренних запросов 74 на узле N2 и ядру выполнения внутренних запросов 74 на узле N3. Параметрами каждого подчиненного запроса являются временная метка ТС^ первичный ключ КИ2 и поле И^С.At step 96, the client query engine 42 queries class C subordinate objects that are referenced by the I2A revision. For this, by referring to the field I ^ C of the revision I2A, the nodes where the subordinate objects are stored are determined. In the example of FIG. 5 are nodes N2 and N3. Further, two subordinate requests 97 and 98 are addressed in parallel to the core of internal queries 74 at node N2 and the core of internal queries 74 at node N3. The parameters of each subordinate request are the timestamp TC ^ primary key KI2 and the field I ^ C.
На шаге 99 ядро выполнения внутренних запросов 74 узла N2 отыскивает по первичному ключу КИ2 ячейку вспомогательного объекта И2* и выбирает из нее последнюю зафиксированную ревизию на момент времени ТОМ Эта ревизия содержит в поле И^С ссылки на ячейки хранения объектов класса С, размещенные в первичном индексе 67 фрагмента базы данных 65 на узле N2. Из поля И^С выбирается массив обратных ссылок, состоящий согласно фиг. 5 из одной ссылки И2^С2, указывающей на ячейку хранения объекта С2. По этой ссылке на узле N2 выбирается последняя зафиксированная ревизия объекта С2 на момент времени ТОМ допустим С2А, и копия этой ревизии возвращается в ответе 101 на подчиненный запрос 97.At step 99, the core of performing internal queries 74 of node N2 searches for the cell of auxiliary object I2 * using the primary key KI2 and selects from it the last committed revision at the moment of time TOM. This revision contains in the field I ^ C references to storage cells of objects of class C located in the primary index 67 of database fragment 65 on node N2. An array of backlinks consisting of FIG. 5 from one link I2 ^ C2, pointing to the storage cell of the object C2. Using this link on node N2, the last recorded revision of the object C2 is selected at the moment TOM, let’s say C2A, and a copy of this revision is returned in response 101 to the subordinate request 97.
Аналогично, на шаге 100 ядро выполнения внутренних запросов 74 узла N3 отыскивает по первичному ключу КИ2 ячейку вспомогательного объекта И2* и выбирает из нее последнюю зафиксированную ревизию на момент времени ТОМ Эта ревизия содержит в поле И^С ссылки на все ячейки объектов класса С, которые согласно карте размещения первичного индекса хранятся на узле N3. Из поля И^С выбирается массив обратных ссылок, состоящий согласно фиг. 5 из одной ссылки И2^С3 на ячейку хранения объекта С3. По этой ссылке на узле N3 выбирается последняя зафиксированная ревизия объекта С3 на момент времени ТОМ допустим С3А, и копия этой ревизии возвращается в ответе 102 на подчиненный запрос 98.Similarly, at step 100, the core of performing internal queries 74 of node N3 searches for the cell of auxiliary object I2 * using the primary key KI2 and selects from it the last committed revision at time TOM. This revision contains links to all cells of objects of class C in the field I ^ C, which according to the map, the primary index locations are stored on node N3. An array of backlinks consisting of FIG. 5 from one link I2 ^ C3 to the storage cell of the object C3. Using this link on node N3, the last recorded revision of the C3 object is selected at the moment TOM, let’s say C3A, and a copy of this revision is returned in the response 102 to the subordinate request 98.
На шаге 103 ядро выполнения клиентских запросов 42 достраивает взаимные ссылки между всеми полученными ревизиями объектов (ревизиями И2А, С2А, С3А в рассматриваемом примере).At step 103, the kernel for executing client requests 42 completes the reciprocal links between all received object revisions (revisions I2A, C2A, C3A in the considered example).
На шаге 104 читающая транзакция Т исключается из списка активных транзакций и передается на утилизацию. Утилизация памяти всех завершившихся транзакций выполняется периодически менеджером транзакций. Механизм утилизации рассмотрен ниже в описании изобретения.At step 104, the reading transaction T is excluded from the list of active transactions and transferred for disposal. The memory utilization of all completed transactions is performed periodically by the transaction manager. The disposal mechanism is discussed below in the description of the invention.
На шаге 105 полученный граф объектов возвращается клиенту вместе с новой временной меткой ТОМ Эту временную метку клиент должен передать в следующем обращении к серверу.At step 105, the received object graph is returned to the client along with the new TOM timestamp. The client must pass this timestamp in the next server call.
Специалисту в данной области должно быть очевидно, что рассмотренный пример легко обобщается для произвольного множества объектов, классов, ссылочных полей и подчиненных запросов путем повторения перечисленных выше шагов необходимое количество раз.It should be obvious to a person skilled in the art that the considered example can be easily generalized for an arbitrary set of objects, classes, reference fields and subordinate queries by repeating the above steps as many times as necessary.
Основываясь на изложенных выше структурах хранения объектов и ссылок (фиг. 5 и 6) и методе транзакционной работы с объектами, рассмотрим метод сохранения объектов в базу данных. Сделаем это на примере выполнения некоторого запроса на обновление скалярных данных Группы С1 и Пользователя И2 и добавление Пользователя И2 в Группу С1. Блок-схема выполнения запроса показана на фиг. 9.Based on the above structures for storing objects and links (Figs. 5 and 6) and the method of transactional work with objects, we consider the method of storing objects in a database. We will do this by the example of fulfilling some request to update the scalar data of Group C1 and User I2 and add User I2 to Group C1. A block diagram of the execution of the request is shown in FIG. nine.
На шаге 110 ядро выполнения клиентских запросов 42 некоторого узла-координатора N4 принимает от клиента запрос вида Сохранить объекты, параметрами которого являются временная метка ССN клиента, первичный ключ КС1 объекта С1, значения скалярных полей РС1 объекта С1, первичный ключ КИ2 объекта И2, значения скалярных полей РИ2 объекта И2, ссылка С1^И2 из объекта С1 на объект и2.At step 110, the kernel for executing client requests 42 of a certain coordinating node N4 receives a request from the client of the form Save objects, the parameters of which are the client’s time stamp CCN, primary key KC1 of object C1, values of scalar fields PC1 of object C1, primary key KI2 of object I2, values of scalar fields RI2 of the object I2, the reference C1 ^ I2 from the object C1 to the object i2.
На шаге 111 в объектах достраиваются обратные ссылки, в частности достраивается ссылка И2^С1 из объекта И2 на объект С1.At step 111, backlinks are added to the objects, in particular, the link I2 ^ C1 is built from the I2 object to the C1 object.
На шаге 112 ядро выполнения клиентских запросов 42 узла N4 создает пишущую транзакцию Т с ключом, равным увеличенному значению временной метки узла N4. Транзакция переводится в фазу выполнения операций и помещается в список активных транзакций менеджера транзакций 48.At step 112, the kernel for executing client requests 42 of node N4 creates a write transaction T with a key equal to the increased value of the time stamp of node N4. A transaction is transferred to the execution phase of operations and placed in the list of active transactions of the transaction manager 48.
На шаге 113 ядро выполнения клиентских запросов 42 узла N4 запрашивает с узлов новейшие зафиксированные ревизии объектов С1 и И2. Это делается по рассмотренному выше методу и согласно показанной на фиг. 8 блок-схеме извлечения объектов. В результате исполнения сценария этой схемы на шаге 114 из первичного индекса 67 фрагмента базы данных 65 узла N1 извлекается некоторая ревизия И2Х объекта И2 и возвращается ядру выполнения клиентских запросов 42 на узле N4. Аналогично наAt step 113, the kernel for executing client requests 42 of node N4 requests the latest fixed revisions of objects C1 and I2 from the nodes. This is done according to the method discussed above and as shown in FIG. 8 block diagram of the extraction of objects. As a result of the execution of the scenario of this scheme, at step 114, from the primary index 67 of the database fragment 65 of the N1 node, a certain revision of the IIX of the I2 object is extracted and returned to the kernel for executing client requests 42 on the N4 node. Similarly on
- 15 027808 шаге 115 из первичного индекса 67 фрагмента базы данных 65 узла N2 извлекается некоторая ревизия С1Х объекта 01 и возвращается ядру выполнения клиентских запросов 42 на узле N4.- 15 027808 in step 115, from the primary index 67 of the database fragment 65 of the N2 node, a certain revision С1Х of the object 01 is extracted and returned to the kernel for executing client requests 42 on the N4 node.
На шаге 116 ядро выполнения клиентских запросов 42 создает объекты 01Υ и υ2Υ как копии ревизий соответственно 01Х и и2Х, в которых обновлены скалярные поля Р01 и Ри2 и увеличены на единицу номера ревизий. На этом шаге дополнительно создаются вспомогательные объекты 01*Υ и υ2*Υ, содержащие обновления для списков обратных ссылок, которые согласно фиг. 5 хранятся в объектах 01* и υ2* на узлах соответственно N1 и N2. Объект 01*Υ представляет собой обновление для объекта 01* на узле N1 и содержит ссылку 01^-Ш в добавочном списке ссылок для поля 0^П. Объект υ2*Υ представляет собой обновление для объекта υ2* на узле N2 и содержит ссылку Ш^-01 в добавочном списке ссылок для поля Ъ >0.At step 116, the kernel for executing client requests 42 creates objects 01Υ and υ2Υ as copies of revisions 01X and i2X, respectively, in which scalar fields P01 and Pu2 are updated and increased by unit of revision number. In this step, auxiliary objects 01 * Υ and υ2 * Υ are additionally created, containing updates for backlink lists, which, according to FIG. 5 are stored in objects 01 * and υ2 * at nodes N1 and N2, respectively. Object 01 * Υ is an update for object 01 * on node N1 and contains the link 01 ^ -Sh in the additional list of links for the field 0 ^ П. The object υ2 * Υ is an update for the object υ2 * on the node N2 and contains the link Ш ^ -01 in the additional list of links for the field b> 0.
На шаге 117 ядро выполнения клиентских запросов 42 по картам размещения вторичных индексов вычисляет узлы хранения ревизий 01Х, 01Υ, υ2Χ, υ2Υ во вторичных индексах. В примере сценария, показанного на фиг. 9, считается, что построены два вторичных индекса - вторичный индекс по некоторым скалярным полям объектов класса 0 и вторичный индекс по некоторым скалярным полям объектов класса υ. При этом считается, что выпадает следующее размещение ревизий объектов 01 и υ2 во вторичных индексах: ревизия 01Х - на узле N1, ревизия 01Υ - на узле N3, ревизии υ2Χ и υ2Υ - на узле N2. Полученное размещение означает, что новая ревизия 01Υ объекта 01 оказалась в другом диапазоне вторичного индекса по сравнению с предыдущей ревизией 01Х и должна быть размещена на другом узле, новая ревизия υ2Υ объекта υ2 размещается на том же самом узле, что и предыдущая ревизия ШХ.At step 117, the kernel for executing client requests 42 on the secondary index allocation cards calculates the storage nodes of revisions 01X, 01Υ, υ2Χ, υ2Υ in the secondary indices. In the example scenario shown in FIG. 9, it is believed that two secondary indexes are constructed — the secondary index for some scalar fields of objects of class 0 and the secondary index for some scalar fields of objects of class υ. In this case, it is believed that the following placement of revisions of objects 01 and υ2 in the secondary indices occurs: revision 01X - at node N1, revision 01Υ - at node N3, revisions υ2Χ and υ2Υ - at node N2. The resulting placement means that the new revision 01Υ of object 01 turned out to be in a different range of the secondary index compared to the previous revision 01X and should be placed on another node, the new revision υ2Υ of object υ2 is located on the same node as the previous revision of SH.
Учитывая размещение ревизий 01Υ, υ2Υ, 01Х, ШХ в первичном и вторичных индексах, объекты распределяются среди узлов-участников следующим образом. На шаге 118 узел N1 принимает: ревизию υ2Υ для включения в первичный индекс, ревизию 01*Υ для включения в первичный индекс как вспомогательный объект, номер ревизии 01Х для изъятия объекта из вторичного индекса на данном узле. На шаге 119 узел N2 принимает: ревизию 01Υ для включения в первичный индекс, ревизию υ2*Υ для включения в первичный индекс как вспомогательный объект, ревизию υ2Υ для включения во вторичный индекс. На шаге 120 узел N3 принимает ревизию 01Υ для включения во вторичный индекс. Каждый узел-участник принимает еще идентификатор транзакции Т, в рамках которой выполняется сохранение объектов.Given the placement of revisions 01Υ, υ2Υ, 01Х, ШХ in the primary and secondary indices, objects are distributed among the participating nodes as follows. At step 118, node N1 receives: revision υ2Υ for inclusion in the primary index, revision 01 * Υ for inclusion in the primary index as an auxiliary object, revision number 01X for removing the object from the secondary index on this node. At step 119, node N2 receives: revision 01Υ for inclusion in the primary index, revision υ2 * Υ for inclusion in the primary index as an auxiliary object, revision υ2Υ for inclusion in the secondary index. In step 120, the node N3 receives a 01Υ revision for inclusion in the secondary index. Each participating node also receives a transaction identifier T, within which objects are saved.
Далее каждый из узлов-участников выполняет одинаковую последовательность действий, показанную на фиг. 9 шагами 121, 124, 127 и 130. На узле N1 ядро выполнения внутренних запросов 74 выполняет следующие действия. На шаге 121 регистрируется пишущая транзакция Т. Транзакция переводится в состояние выполнения операций и помещается в список активных транзакций менеджера транзакций 68. На шаге 124 во фрагменте базы данных 65 в первичном индексе 67 сохраняются ревизии υ2Υ и 01*Υ и во вторичном индексе 69 сохраняется признак изъятия объекта с ревизией 01Х из вторичного индекса. Операции этого шага более подробно пояснены на фиг. 10. На шаге 127 транзакция Т переводится в состояние готовности к фиксации и вычисляется временная метка ΚСN1 этой транзакции. Временная метка РСШ вычисляется как увеличенное на единицу значение временной метки узла. На шаге 130 запрос на выяснение результата транзакции Т ставится в очередь транзакций, ожидающих результата. Временная метка РСШ возвращается в ответе 133 ядру выполнения клиентских запросов 42 на узел-координатор N4.Further, each of the participating nodes performs the same sequence of operations shown in FIG. 9 in steps 121, 124, 127, and 130. At node N1, the internal query execution engine 74 performs the following actions. At step 121, a writing transaction T is registered. The transaction is transferred to the execution state of transactions and placed in the list of active transactions of transaction manager 68. At step 124, in the database fragment 65, revisions υ2 рев and 01 * фраг are stored in the primary index 67 and the attribute is stored in the secondary index 69 withdrawals of an object with revision 01X from the secondary index. The operations of this step are explained in more detail in FIG. 10. At step 127, transaction T is put into a ready-to-commit state and the timestamp ΚCN1 of this transaction is calculated. The time stamp of the PCS is calculated as the unit time value of the node increased by one. At step 130, a request to clarify the result of transaction T is queued for transactions awaiting a result. The PCS timestamp is returned in response 133 to the kernel for executing client requests 42 to coordinator node N4.
Аналогично на узле N2 ядро выполнения внутренних запросов 74 выполняет следующие действия. На шаге 122 регистрируется пишущая транзакция Т. Транзакция переводится в состояние выполнения операций и помещается в список активных транзакций менеджера транзакций 68. На шаге 125 во фрагменте базы данных 65 в первичном индексе 67 сохраняются ревизии 01Υ и υ2*Υ и во вторичном индексе 69 сохраняется ревизия υ2Υ. На шаге 128 транзакция Т переводится в состояние готовности к фиксации и вычисляется временная метка КСШ этой транзакции. Временная метка КСШ вычисляется как увеличенное на единицу значение временной метки узла. На шаге 131 запрос на выяснение результата транзакции Т ставится в очередь транзакций, ожидающих результата. Временная метка КСШ возвращается в ответе 134 ядру выполнения клиентских запросов 42 на узел-координатор N4.Similarly, at node N2, the internal query execution engine 74 performs the following actions. At step 122, the writing transaction T is recorded. The transaction is transferred to the execution state of the transactions and placed in the list of active transactions of transaction manager 68. At step 125, revisions 01Υ and υ2 * Υ are stored in the database fragment 65 in the primary index 67 and the revision is stored in the secondary index 69 υ2Υ. At step 128, transaction T is put into a ready-to-commit state, and the timestamp of the KSS of this transaction is calculated. The time stamp of the KSSh is calculated as the unit time value of the node increased by one. At step 131, a request to clarify the result of transaction T is queued for transactions awaiting a result. The time stamp of the KSSh is returned in the response 134 to the kernel for executing client requests 42 to the coordinator node N4.
Аналогично на узле N3 ядро выполнения внутренних запросов 74 выполняет следующие действия. На шаге 123 регистрируется пишущая транзакция Т. Транзакция переводится в состояние выполнения операций и помещается в список активных транзакций менеджера транзакций 68. На шаге 126 во фрагменте базы данных 65 во вторичном индексе 69 сохраняется ревизия 01Υ. На шаге 129 транзакция Т переводится в состояние готовности к фиксации и вычисляется временная метка РСШ этой транзакции. Временная метка РСШ вычисляется как увеличенное на единицу значение временной метки узла. На шаге 132 запрос на выяснение результата транзакции Т ставится в очередь транзакций, ожидающих результата. Временная метка РСШ возвращается в ответе 135 ядру выполнения клиентских запросов 42 на узел-координатор N4.Similarly, on node N3, the internal query execution engine 74 performs the following actions. At step 123, a writing transaction T is registered. The transaction is transferred to the execution state of operations and placed in the list of active transactions of transaction manager 68. At step 126, the 01Υ revision is saved in the database fragment 65 in the secondary index 69. At step 129, transaction T is put into a ready-to-commit state, and the PCS timestamp of this transaction is calculated. The time stamp of the PCS is calculated as the unit time value of the node increased by one. At step 132, a request to clarify the result of transaction T is queued for transactions awaiting a result. The timestamp of the RSL is returned in the response 135 to the kernel for executing client requests 42 to the coordinator node N4.
На шаге 136 ядром выполнения клиентских запросов на узле N4 транзакция Т переводится в состояние готовности к фиксации и вычисляется временная метка К.С№) этой транзакции. Временная метка К.С№) вычисляется как увеличенное на единицу значение временной метки узла.At step 136, the kernel for executing client requests at node N4, the transaction T is put into a state of readiness for fixation and the time stamp K.С№) of this transaction is calculated. The time stamp K.С№) is calculated as the unit time value of the node increased by one.
- 16 027808- 16 027808
На шаге 137 вычисляется новая временная метка ΊΌΝ, равная максимуму из временных меток ΚΗΝΟ, Κ£Ν1, ΚΗΝ2, ΚΤΝ3.At step 137, a new timestamp ΊΌΝ is calculated, equal to the maximum of the timestamps ΚΗΝΟ, Κ £ Ν1, ΚΗΝ2, ΚΤΝ3.
На шаге 138 выполняется фиксация транзакции Т с временной меткой Τί'.'Ν. Фиксация затрагивает лишь узел-координатор Ν4.At step 138, transaction T is committed with the timestamp Τί '.' Ν. The fixation affects only the coordinating node Ν4.
Фиксация транзакции на узлах-участниках выполняется позже в асинхронном режиме. Для этого на шаге 139 запрос на завершение фиксации транзакции Т на узлах-участниках Ν1, Ν2, Ν3 ставится в очередь транзакций, ожидающих завершение фиксации. Запросы из этой очереди выбираются асинхронным процессом, который рассылает команды фиксации узлам-участникам. Механизм фиксации транзакций является практически однофазным и не требует от клиента ожидания фиксации транзакции на всех узлах. Достаточно переключить транзакцию в состояние готовности на всех узлах, чтобы считать транзакцию логически зафиксированной. Участие в транзакции двух и более узлов обеспечивает необходимую гарантию надежности механизма транзакций и его устойчивости к отказам одного из узлов. Дополнительной оптимизацией при фиксации является рассылка узлам команд в пакетном режиме, когда в одном сообщении узлу приходит сразу несколько команд фиксации для нескольких завершенных транзакций.The transaction is committed to the participating nodes later in asynchronous mode. To do this, at step 139, a request to complete the commit of transaction T on the participating nodes Ν1, Ν2, Ν3 is placed in the queue of transactions awaiting completion of the commit. Requests from this queue are fetched by an asynchronous process that sends commit commands to the participating nodes. The transaction fixation mechanism is almost single-phase and does not require the client to wait for the transaction to be committed to all nodes. It is enough to switch the transaction to the ready state on all nodes in order to consider the transaction logically fixed. Participation in the transaction of two or more nodes provides the necessary guarantee of the reliability of the transaction mechanism and its resistance to failure of one of the nodes. An additional optimization during commit is sending out commands to the nodes in batch mode, when in one message the node receives several commit commands for several completed transactions.
На шаге 140 клиенту отправляется новая временная метка ТСИ, используемая им впоследствии для выполнения операций извлечения и поиска объектов. Гарантируется, что клиент прочитает новейшие к времени ΤСN ревизии объектов и не увидит данные в прошлом относительно этой временной метки.At step 140, a new TSI timestamp is sent to the client, which it subsequently uses to perform operations of extracting and searching for objects. It is guaranteed that the client will read the latest object revisions by the time of ΤCN and not see past data regarding this timestamp.
На фиг. 10 показана блок-схема, дополняющая фиг. 9 и помогающая понять способ, с помощью которого выполняются сохранение объектов на узле-участнике в фрагмент базы данных в рамках транзакции сохранения объектов.In FIG. 10 is a block diagram in addition to FIG. 9 and helping to understand the way in which objects are saved on a participating node to a database fragment as part of a transaction to save objects.
Предназначенный для сохранения список объектов 141 передается в цикл обработки 142, в котором для каждого объекта О из входного списка 141 выполняются операции, начиная с 143 и заканчивая 152.The list of objects 141 intended for storage is transferred to the processing cycle 142, in which, for each object O from the input list 141, operations are performed starting from 143 and ending with 152.
На шаге 143 определяется заданный во входном списке режим сохранения объекта О - создание нового объекта или обновление существующего. Если запрашивается создание нового объекта, то на шаге 144 в первичном индексе создается новая ячейка НО для хранения объекта О. Эта операция выполняется атомарно. Если запрашивается обновление существующего объекта, то на шаге 145 в первичном индексе отыскивается существующая ячейка НО объекта О.At step 143, the storage mode of object O specified in the input list is determined — creating a new object or updating an existing one. If the creation of a new object is requested, then in step 144, a new HO cell is created in the primary index to store object O. This operation is performed atomically. If updating of an existing object is requested, then in step 145, the existing HO cell of object O is searched in the primary index.
На шаге 146 объект О атомарно добавляется в список ревизий ячейки НО. Структура списка ревизий была рассмотрена выше в описании фиг. 6. Список ревизий является однонаправленным, элементы следуют от новейшей ревизии к старейшей ревизии, ссылка на начало списка содержится в ячейке хранения объекта. С каждым элементом списка ассоциирована транзакция, в рамках которой была создана ревизия объекта. Объект транзакции хранит временную метку, с которой транзакция была зафиксирована. Ссылка на транзакцию является пустой, если транзакция была утилизирована, причем в таком случае значение временной метки фиксации уже не имеет значения, поскольку утилизируются лишь те транзакции, время фиксации которых гарантированно находится в прошлом относительно метки времени любого клиента. Объект О добавляется в начало списка ревизий ячейки НО, причем это происходит лишь при условии, что предыдущая ревизия зафиксирована на момент операции и не превышает по номеру ревизию объекта О. Если указанное условие не выполняется, то это свидетельствует о конфликте транзакций один и тот же объект обновляется одновременно несколькими клиентами.At step 146, the O object is atomically added to the revision list of the cell BUT. The structure of the audit list was discussed above in the description of FIG. 6. The list of revisions is unidirectional, the elements follow from the latest revision to the oldest revision, a link to the beginning of the list is contained in the object storage cell. With each element of the list, a transaction is associated within which an object revision was created. The transaction object stores the timestamp with which the transaction was committed. The transaction reference is empty if the transaction has been disposed of, in which case the value of the commit timestamp does not matter anymore, since only those transactions whose commit time is guaranteed to be in the past relative to the timestamp of any client are utilized. Object O is added to the beginning of the list of revisions of the cell BUT, and this only happens if the previous revision is fixed at the time of the operation and does not exceed the revision of object O by number. If the specified condition is not met, this indicates a conflict of the same object updated simultaneously by multiple clients.
На шаге 147 проверяется, не возник ли конфликт транзакций, и если конфликта нет, то происходит переход к следующему шагу 148. В случае конфликта транзакций цикл 142-153 прерывается и на шаге 154 устанавливается признак отката транзакции.At step 147, it is checked whether a transaction conflict has occurred, and if there is no conflict, then proceeds to the next step 148. In the case of a transaction conflict, the cycle 142-153 is interrupted and at step 154 the sign of transaction rollback is set.
В цикле 148-152 объект О добавляется во вторичные индексы, заданные для объекта О в исходном списке. Запрос на добавление объекта О в некоторый вторичный индекс 8 поступает от узлакоординатора лишь в том случае, если вторичный ключ объекта О в индексе 8 приходится на размещенный на данном узле диапазон. От узла-координатора может поступить запрос на исключение объекта О из вторичного индекса 8 на данном узле в том случае, если в транзакции создана более новая ревизия объекта, размещаемая в другом диапазоне вторичного индекса 8 на другом узле-участнике.In cycle 148-152, object O is added to the secondary indexes defined for object O in the source list. The request to add the object O to some secondary index 8 comes from the node coordinator only if the secondary key of the object O in index 8 falls on the range located on this node. From the coordinating node, a request may be made to exclude object O from secondary index 8 on this node if a newer revision of the object is created in the transaction and placed in a different range of secondary index 8 on another participating node.
Вторичный индекс бывает двух типов - с уникальными и неуникальными ключами. На шаге 149 делается проверка типа вторичного индекса 8. Если это индекс с уникальными ключами, на шаге 150 выполняется проверка, не возникает ли конфликт вторичного ключа объекта О с вторичными ключами существующих объектов в индексе 8. Если обнаруживается конфликт вторичного ключа в индексе 8, цикл 148-152 прерывается и на шаге 154 устанавливается признак отката транзакции. Если конфликт вторичного ключа не обнаружен, или же вторичный индекс 8 построен с неуникальными ключами, на шаге 151 объект О добавляется во вторичный индекс 8.The secondary index is of two types - with unique and non-unique keys. At step 149, a check is made of the type of secondary index 8. If it is an index with unique keys, at step 150 it is checked whether there is a conflict of the secondary key of object O with the secondary keys of existing objects in index 8. If a conflict of the secondary key in index 8 is detected, the cycle 148-152 is aborted and at step 154 a sign of transaction rollback is set. If a conflict of the secondary key is not detected, or if the secondary index 8 is built with non-unique keys, at step 151 object O is added to the secondary index 8.
Цикл 148-152 выполняется для каждого вторичного индекса 8, запрошенного для объекта О в исходном списке 141.Loop 148-152 is executed for each secondary index 8 requested for object O in source list 141.
На шаге 155 признак успешного сохранения объектов в фрагмент базы данных, или признак отката транзакции, возвращается ядру выполнения внутренних запросов 74. В случае отката транзакции ядро выполнения внутренних запросов 74 целиком отменяет операцию сохранения списка объектов в фрагмент базы данных.At step 155, the sign of successful saving of objects to the database fragment, or the sign of transaction rollback, is returned to the internal query execution kernel 74. In the case of a transaction rollback, the internal query execution kernel 74 completely cancels the operation of saving the list of objects to the database fragment.
Основываясь на изложенных выше структурах хранения объектов и ссылок (фиг. 5 и 6) и методеBased on the above storage structures of objects and links (Fig. 5 and 6) and the method
- 17 027808 транзакционной работы с объектами, рассмотрим метод поиска объектов в базе данных по значениям скалярных полей. Сделаем это на примере поиска и извлечения некоторого количества Пользователей и для каждого Пользователя - некоторого количества ассоциированных с ним Групп. Блок-схема выполнения запроса показана на фиг. 11 и фиг. 12.- 17 027808 transactional work with objects, consider the method of searching for objects in the database by the values of scalar fields. We will do this by the example of searching and retrieving a certain number of Users and for each User - a certain number of Groups associated with it. A block diagram of the execution of the request is shown in FIG. 11 and FIG. 12.
В рассматриваемом варианте осуществления изобретения поиск объектов по значениям скалярных полей является индексно-последовательным и требует наличия в базе данных вторичного индекса, построенного по этим полям. Если требуемый вторичный индекс построен, по нему можно выполнить поиск.In this embodiment, the search for objects by the values of scalar fields is index-sequential and requires a secondary index built on these fields in the database. If the required secondary index is built, a search can be performed on it.
На шаге 160 ядро выполнения клиентских запросов 42 некоторого узла-координатора N4 принимает от клиента запрос вида «Найти и извлечь объекты», параметрами которого являются временная метка ССN клиента, класс и искомых объектов, вторичный индекс δ (в котором следует выполнить поиск объектов), вторичный ключ δυ начального объекта (с которого следует выполнять последовательную фильтрацию), уточняющий первичный ключ Ки пропускаемого объекта, условие фильтрации Си объектов класса и по значениям скалярных полей, предельное количество Νυ извлекаемых объектов класса и, имя ссылочного поля и >0 для выбора подчиненных объектов, класс О подчиненных искомых объектов, ссылочный индекс К (построенный по полю и^О и обеспечивающий нужный порядок следования объектов класса О в объектах класса и), условие фильтрации СО объектов класса О по значениям скалярных полей, предельное количество N0 извлекаемых объектов класса О в каждом объекте класса и.At step 160, the kernel for executing client requests 42 of a certain coordinating node N4 receives a request of the form “Find and extract objects” from the client, the parameters of which are the client’s CCN, class and objects to be searched, secondary index δ (in which you should search for objects), the secondary key δυ of the initial object (from which sequential filtering should be performed), which specifies the primary key Ki of the passed object, the filtering condition of the C objects of the class and by the values of scalar fields, the maximum quantity Νυ is extracted objects of class u, the name of the reference field and> 0 for selecting subordinate objects, class O of subordinate desired objects, reference index K (constructed from the field u ^ O and providing the necessary order of the objects of class O in the objects of class i), the condition for filtering CO objects class O according to the values of scalar fields, the limit number N0 of recoverable objects of class O in each object of class and.
На шаге 161 менеджером транзакций 48 в списке активных транзакций создается читающая транзакция Т с временной меткой Τί','Ν. Значение временной метки выбирается так, чтобы она была не меньше временной метки клиента, но не больше временной метки узла. Метка времени ΤСN используется для чтения зафиксированных к этому времени ревизий объектов и для отбрасывания более поздних изменений данных. На этом шаге фактически происходит продвижение логического времени клиента вперед, причем клиент немного отстает по времени от системы, что обеспечивает в большинстве случаев бесконфликтное чтение и редактирование данных. Величина отставания времени клиентов от времени системы может динамически корректироваться в зависимости от текущей загрузки системы.At step 161, the transaction manager T creates a reading transaction T with the time stamp Τί ',' в in the list of active transactions 48. The timestamp value is selected so that it is not less than the client’s timestamp, but not more than the node’s timestamp. ВремениCN timestamp is used to read revisions of objects fixed by this time and to discard later data changes. At this step, the client’s logical time is actually moving forward, and the client is slightly behind in time from the system, which in most cases ensures conflict-free reading and editing of data. The amount of client time lag from the system time can be dynamically adjusted depending on the current system load.
На шаге 162 ядро выполнения клиентских запросов 42 выбирает из конфигурации базы данных 46 карту размещения вторичного индекса δ, находит в этой карте соответствующий ключу δи начальный узел вторичного индекса, на котором следует выполнить двоичный поиск и фильтрацию объектов. В рассматриваемом на фиг. 11 примере предполагается, что начальным узлом становится узел N1. С этого узла из вторичного индекса δ запрашиваются зафиксированные на момент времени ΤСN объекты класса и, удовлетворяющие условию Си, в количестве не более ΝΗ начиная с объекта с вторичным ключом δи и первичным ключом Ки, пропуская этот объект. Для этого в запросе 163 на целевой узел передаются временная метка ТСЮ класс извлекаемых объектов и, вторичный индекс δ, вторичный ключ δ^ первичный ключ Ки, условие фильтрации Си, предельное количество объектов ΝΗAt step 162, the kernel for executing client queries 42 selects the secondary index location map δ from the database configuration 46, finds in this map the corresponding secondary key δ and the secondary index start node on which to perform binary search and filtering of objects. In the case of FIG. 11 example, it is assumed that the starting node becomes the node N1. From this node, from the secondary index δ, objects of the class fixed at time ΤCN are requested and satisfying the C condition, in an amount of no more than ΝΗ starting from the object with the secondary key δi and the primary key Ki, skipping this object. To do this, in request 163, the TSS timestamp is used to transfer the class of retrieved objects and, the secondary index δ, the secondary key δ ^ the primary key Ki, the filtering condition C, the limit number of objects ΝΗ
На шаге 164 ядро выполнения внутренних запросов 74 узла-участника двоичным поиском отыскивает во вторичном индексе δ первый объект с вторичным ключом δΗ Если первичный ключ Ки не задан, с этого момента начинается фильтрация объектов с помощью временной метки ΤСN и условия Си. Если первичный ключ Ки задан, последовательным просмотром объектов с ключом δи во вторичном индексе δ отыскивается объект с первичным ключом Ки. Сразу следом за этим объектом начинается фильтрация объектов с помощью временной метки ΤСN и условия Си. Во фрагменте вторичного индекса на данном узле содержатся все ревизии всех объектов, в которых вторичные ключи включены в диапазон данного узла. Это значит, что при проходе по вторичному индексу в выборку могут попадать несколько ревизий одного и того же объекта. Чтобы это исключить, применяется следующий метод фильтрации. Для каждой выбираемой из вторичного индекса ревизии осуществляется проверка, является ли она ближайшей к временной метке ΤСN ревизией. Согласно фиг. 6, каждая ревизия (например, и 1В) содержит ссылку на ячейку хранения объекта (например, Ни1), ссылку на объект транзакции (например, Т1) с временной меткой фиксации (например, Τί'Ν1) и ссылку на следующую ревизию (например, и1А). Через ячейку и связный список доступны все ревизии объекта. Имея ревизию, ядро выполнения внутренних запросов обращается к ячейке хранения объекта, проходит по связному списку ревизий и отыскивает в нем ревизию с ближайшей к ΤСN временной меткой, меньшей либо равной Τί','Ν. Затем выполняется проверка, совпадает ли эта ревизия с ревизией, взятой из вторичного индекса. Если - нет, то ревизия, взятая из вторичного индекса, пропускается. Если - да, выполняется проверка, что ревизия зафиксирована. Если ревизия не зафиксирована, выполняется попытка фиксации на лету. Неудача на стадии фиксации на лету вызывает досрочно прекращение операции 164 с возвратом узлу-участнику и затем клиенту признака конфликта с другим параллельным запросом. В ответ клиент может выждать некоторое время и повторить запрос в надежде, что с новой попыткой конфликта не будет. Если ревизия зафиксирована, к ней применяется условие фильтрации Си.At step 164, the kernel executing internal queries 74 of the participating node by a binary search looks for the first object with the secondary key δ in the secondary index δ. If the primary key Ki is not specified, then filtering of objects using the начинаетсяСN timestamp and condition C starts. If the primary key Ki is specified, by sequential viewing of objects with the key δ and in the secondary index δ, an object with the primary key Ki is found. Immediately after this object, filtering of objects begins using the метCN timestamp and the C condition. The secondary index fragment on this node contains all revisions of all objects in which secondary keys are included in the range of this node. This means that when passing through the secondary index, several revisions of the same object may fall into the sample. To eliminate this, the following filtering method is used. For each revision selected from the secondary index, a check is made to see if it is the revision closest to the ΤCN timestamp. According to FIG. 6, each revision (for example, 1B) contains a link to the storage cell of the object (for example, Ni1), a link to the transaction object (for example, T1) with a time stamp (for example, Τί'Ν1) and a link to the next revision (for example, and 1A). Through the cell and the linked list, all revisions of the object are available. Having a revision, the kernel for executing internal queries accesses the object storage cell, passes through a linked list of revisions and looks for the revision with the closest time stamp to ΤCN, less than or equal to Τί ',' Ν. Then, a check is made to see if this revision matches the revision taken from the secondary index. If not, then the revision taken from the secondary index is skipped. If - yes, it checks that the audit is committed. If the revision is not committed, an attempt is made to commit on the fly. Failure at the fixation stage on the fly causes early termination of operation 164 with a return to the participating node and then to the client of the sign of conflict with another parallel request. In response, the client can wait a while and repeat the request in the hope that there will be no conflict with the new attempt. If the revision is committed, the C filtering condition is applied to it.
Условие фильтрации Си представляет собой булевское выражение над полями объекта. По результатам вычисления этого выражения ревизия или включается в результирующее множество {№}, или пропускается. Фильтрация объектов с помощью временной метки ΤСN и условия Си останавливается, если количество элементов в множестве {Щ} становится равным ΝΗ или достигнут конец фрагментаThe C filtering condition is a Boolean expression over the fields of an object. According to the results of computing this expression, the revision is either included in the result set {No.}, or is skipped. Filtering objects using the метCN timestamp and the C condition stops if the number of elements in the set {Щ} becomes equal to ΝΗ or the end of the fragment is reached
- 18 027808 вторичного индекса 8 на данном узле. Результирующее множество {№} выбранных объектов, количество ΝΝυ выбранных объектов, вторичный ключ Ν8υ последнего элемента и первичный ключ ΝΚυ последнего элемента возвращаются в ответе 165 на узел-координатор.- 18 027808 of secondary index 8 on this node. The resulting set {No.} of the selected objects, the number ΝΝυ of the selected objects, the secondary key Ν8υ of the last element and the primary key ΝΚυ of the last element are returned in the answer 165 to the coordinating node.
На шаге 166 ядро выполнения клиентских запросов 42 узла-координатора проверяет, выбрано ли требуемое количество объектов. Для этого значение ΝΝυ сравнивается со значением Νυ. Если ΝΝυ меньше Νυ, фильтрацию объектов следует продолжить на следующем узле в следующем диапазоне вторичного индекса 8. Если требуется продолжить поиск, на шаге 167 значение Νυ уменьшается на величину ΝΝυ, вторичному ключу 8υ присваивается значение Ν8υ, первичному ключу Κυ присваивается значение ΝΚυ и поисковый запрос повторяется на следующем узле в следующем диапазоне вторичного индекса (если такой имеется). В примере на фиг. 11 следующим узлом для вторичного индекса 8 считается узел Ν2. На него передается поисковый запрос 168. Параметры запроса 168 полностью соответствуют параметрам запроса 163.At step 166, the client query engine 42 of the coordinator node checks whether the required number of objects has been selected. For this, the value of ΝΝυ is compared with the value of Νυ. If ΝΝυ is less than Νυ, filtering of objects should be continued on the next node in the next range of secondary index 8. If you want to continue the search, in step 167 the value of Νυ decreases by наυ, the secondary key 8υ is assigned the value Ν8υ, the primary key Κυ is assigned the value ΝΚυ and the search query repeated on the next node in the next range of the secondary index (if any). In the example of FIG. 11, the next node for secondary index 8 is node узел2. A search query 168 is transmitted to it. The query parameters 168 fully correspond to the query parameters 163.
На шаге 169 следующий узел-участник отыскивает в своем диапазоне вторичного индекса 8 объект, следующий за вторичным ключом 8υ и первичным ключом Κυ. Этот объект соответствует началу диапазона вторичного индекса 8 на данном узле-участнике. Далее на шаге 169 выполняется фильтрация объектов, аналогичная фильтрации шага 164. В результате формируется ответ 170, эквивалентный описанному выше ответу 165. Этот ответ передается на узел-координатор, который снова выполняет проверку 166 и принимает решение о том, следует ли продолжить поиск объектов на следующем узле в следующем диапазоне вторичного индекса 8.At step 169, the next participant node searches in its range of secondary index 8 for the object following the secondary key 8υ and the primary key Κυ. This object corresponds to the beginning of the secondary index range of 8 on this member node. Next, at step 169, filtering of objects is performed, similar to filtering of step 164. As a result, a response 170 is generated that is equivalent to the response 165 described above. This response is transmitted to the coordinator node, which again checks 166 and decides whether to continue searching for objects on next node in the next range of secondary index 8.
Если узел-координатор выбрал из вторичного индекса 8 необходимое количество объектов или все диапазоны вторичного индекса просмотрены, цикл опроса диапазонов прерывается, на шаге 171 все выбранные объекты сливаются в одно множество {υί} и начинается показанный на фиг. 12 выбор подчиненных объектов.If the coordinating node selected the necessary number of objects from the secondary index 8 or all the ranges of the secondary index are scanned, the range polling cycle is interrupted, at step 171 all the selected objects merge into one set {υί} and the one shown in FIG. 12 selection of subordinate objects.
На шаге 172 ядро выполнения клиентских запросов 42 узла-координатора выделяет множество первичных ключей {Κυί} из множества {υί} выбранных объектов. Для каждого ключа из этого множества на узлах будут найдены вспомогательные объекты с таким ключом, из них через прямые ссылки будут извлечены подчиненные объекты, переданы на узел-координатор, объединены и ограничены по количеству. В результате для каждого объекта υί будет сформировано множество подчиненных объектов {О_)}, что обозначается как υί:{Ο_)}. Множество всех объектов υί вместе с их подчиненными объектами обозначается как {υί:{0(}}.At step 172, the kernel for executing client requests 42 of the coordinator node selects the set of primary keys {Κυί} from the set {υί} of selected objects. For each key from this set, auxiliary objects with such a key will be found on the nodes, subordinate objects will be extracted from them through direct links, transferred to the coordinating node, combined and limited in number. As a result, for each object υί many subordinate objects {О_)} will be formed, which is denoted as υί: {Ο_)}. The set of all objects υί together with their subordinate objects is denoted as {υί: {0 (}}.
На шаге 173 ядро выполнения клиентских запросов 42 узла-координатора запрашивает на узлахучастниках зафиксированные на момент времени ΤСN объекты класса О, на которые вспомогательные объекты с ключами {Κυί} ссылаются через поле υ^Ο. Узлы-участники определяются на основании значений ключей {Κυί} и карты размещения первичного индекса на узлах. В параметрах запроса 174, передаваемого на каждый релевантный узел-участник, указываются: временная метка ΤΟΝ, ключи {Κυί} располагаемых на узле вспомогательных объектов, имя ссылочного поля υ^Ο для выбора подчиненных объектов, класс О выбираемых объектов, ассоциированный с полем υ^Ο ссылочный индекс К (который должен обеспечить нужный порядок просмотра и извлечения объектов), условие СО извлечения объектов и максимальное количество ΝΟ извлекаемых объектов.At step 173, the kernel for executing client requests 42 of the coordinator node requests on the nodes of the participants objects of class O fixed at time моментCN, to which auxiliary objects with keys {Κυί} are referenced through the field υ ^ Ο. Participating nodes are determined based on the values of the keys {Κυί} and the map for placing the primary index on the nodes. The parameters of the query 174 sent to each relevant participating node include: timestamp ΤΟΝ, keys {Κυί} of auxiliary objects located on the node, name of the reference field υ ^ Ο for selecting subordinate objects, class O of selected objects associated with the field υ ^ Ο reference index K (which should provide the necessary order of viewing and retrieving objects), the condition of SO extraction of objects and the maximum number of ΝΟ recoverable objects.
Далее ядро выполнения внутренних запросов 74 каждого релевантного узла-участника выполняет одну и ту же последовательность действий, показанную на фиг. 12 в виде цикла 175-177. Тело цикла представлено блоком 176. В нем для каждого ключа Κυί из входного множества {Κυί} отыскивается зафиксированная на момент времени ΤСN ревизия вспомогательного объекта υί*. В этой ревизии из поля Е >С, извлекается ссылочный индекс К. Если это первое использование данного ссылочного индекса в данной ревизии объекта, то выполняется построение ссылочного индекса К путем сортировки первичного множества ссылок поля υ^Ο на основе значений скалярных полей адресуемых объектов. Через ссылки индекса К извлекаются зафиксированные на момент времени ΤСN объекты класса Ο, удовлетворяющие условию СΟ, в количестве не более ΝΟ. В результате для каждого ключа Κυί создается множество подчиненных объектов {Ο_|}, что обозначается как Κυί:{Ο_)}. Множество всех ключей Κυί вместе с ассоциированными с ними подчиненными объектами обозначается как {Κυί:{Ο_|}}. Это множество возвращается узлу-координатору в ответе 178 узла-участника.Next, the internal query engine 74 of each relevant member node performs the same sequence of operations as shown in FIG. 12 in the form of a cycle 175-177. The body of the cycle is represented by block 176. In it, for each key Κυί from the input set {Κυί}, a revision of the auxiliary object υί * fixed at time ΤCN is searched. In this revision, the reference index K is extracted from the field E> C. If this is the first use of this reference index in this revision of the object, then the reference index K is constructed by sorting the primary set of links of the field υ ^ Ο based on the values of the scalar fields of the addressed objects. Through references of the index K, objects of class Ο fixed at the time времениCN that satisfy the condition CΟ are extracted in an amount of no more than ΝΟ. As a result, for each key Κυί, a set of subordinate objects {Ο_ |} is created, which is denoted as Κυί: {Ο_)}. The set of all Κυί keys together with their associated subordinate objects is denoted as {Κυί: {Ο_ |}}. This set is returned to the coordinator node in the response 178 of the member node.
На шаге 179 ядро выполнения клиентских запросов 42 узла-координатора собирает ответы {Κυί:{Ο_|}} всех задействованных узлов-участников. Для каждого ключа Κυί множества {Ο_|}, полученные со всех узлов, объединяются в один набор объектов в порядке следования объектов Ο_) в индексе К, затем из полученного набора выбирается не более ΝΟ объектов, и они ассоциируются с объектом υί. Так создается результирующее множество объектов {υί:{Ο_|}}. На шаге 180 во всех этих объектах достраиваются взаимные ссылки.At step 179, the kernel for executing client requests 42 of the coordinating node collects the responses {Κυί: {Ο_ |}} of all involved participating nodes. For each key Κυί, the sets {Ο_ |} obtained from all nodes are combined into one set of objects in the order of objects Ο_) in the index K, then no more than ΝΟ objects are selected from the resulting set, and they are associated with the object υί. This creates the resulting set of objects {υί: {Ο_ |}}. At step 180, reciprocal links are completed in all of these objects.
На шаге 181 менеджером транзакций 48 узла-координатора в списке активных транзакций удаляется читающая транзакция Т.At step 181, the transaction manager 48 in the list of active transactions is deleted by the transaction manager 48 of the coordinating node T.
На шаге 182 полученный граф объектов {υί:{Ο_)}} возвращается клиенту вместе с новой временной меткой Τί'.'Ν. Эту временную метку клиент должен передать в следующем обращении к серверу.At step 182, the resulting object graph {υί: {Ο_)}} is returned to the client along with the new timestamp Τί '.' Ν. The client should pass this timestamp in the next server call.
- 19 027808- 19 027808
С целью обеспечения долговременного хранения объектов в базе данных, устойчивого к отключению питающей электроэнергии, зафиксированные объекты сохраняются в постоянное хранилище 72 (фиг. 3). Поскольку устройством хранения данных в постоянном хранилище обычно выступает дисковая память, объекты в нем находятся в файлах, и сохранение объектов в постоянное хранилище выполняется методом сериализации. Существуют несколько режимов сохранения объектов в постоянное хранилище: синхронное сохранение объектов в рамках транзакции, асинхронное сохранение объектов вне транзакций как дополнительная страховка на случай сбоя узла, создание снимка базы данных по запросу администратора базы данных. Режим сохранения объектов в постоянное хранилище выбирается администратором базы данных.In order to ensure long-term storage of objects in a database that is resistant to power outages, fixed objects are stored in a permanent storage 72 (Fig. 3). Since disk storage is usually the storage device in persistent storage, the objects in it are in files, and the objects are stored in persistent storage using the serialization method. There are several modes for saving objects to persistent storage: synchronous saving of objects within a transaction, asynchronous saving of objects outside of transactions as additional insurance in case of a node failure, creating a database snapshot at the request of the database administrator. The mode of saving objects to persistent storage is selected by the database administrator.
В рассматриваемом варианте осуществления изобретения во всех режимах применяется одинаковый метод записи объектов в файлы. В рамках этого метода каждый узел базы данных сериализует в свое локальное постоянное хранилище свой фрагмент базы данных. Набор логических файлов, содержащих все множество доступных объектов базы данных, состоит из снимка базы данных на какой-то момент времени (первый логический файл), приращения к этому снимку до текущего момента времени (второй логический файл) и метаданных о снимке и приращении (третий логический файл). Каждый логический файл может состоять из одного или нескольких физических файлов. Метаданные - это крайние временные метки логических файлов данных, количество и размер объектов в них, другие статистические данные об объектах.In this embodiment, the same method of writing objects to files is used in all modes. In the framework of this method, each database node serializes its fragment of the database into its local persistent storage. A set of logical files containing the entire set of available database objects consists of a snapshot of the database at some point in time (the first logical file), increment to this snapshot to the current point in time (second logical file) and metadata about the snapshot and increment (third logical file). Each logical file can consist of one or more physical files. Metadata is the extreme timestamps of logical data files, the number and size of objects in them, and other statistical data about the objects.
Сохранение объектов в постоянное хранилище осуществляется главным образом путем сериализации объектов в файл приращения. Сериализуются лишь фиксируемые транзакции. Это делается в синхронном или асинхронном режиме в зависимости от установки конфигурационных параметров базы данных. Если выбран синхронный режим, сериализация объектов на узлах осуществляется в рамках транзакций непосредственно перед переводом транзакций в режим готовности. Это наиболее надежный и наименее производительный режим. Он обеспечивает надежное долговременное хранение объектов даже в случае отсутствия резервирования базы данных на уровне узлов. Если выбран асинхронный режим, сериализация объектов выполняется периодически вместе со сборкой мусора. Это наиболее производительный и менее надежный режим. Он применяется вместе с резервированием базы данных на уровне узлов и обеспечивает лучшую производительность долговременного хранения объектов при достаточной надежности.Saving objects to persistent storage is carried out mainly by serializing objects into an increment file. Only committed transactions are serialized. This is done in synchronous or asynchronous mode depending on the installation of the database configuration parameters. If synchronous mode is selected, the serialization of objects on the nodes is carried out as part of the transaction immediately before the transaction is in ready mode. This is the most reliable and least productive mode. It provides reliable long-term storage of objects even if there is no database backup at the node level. If asynchronous mode is selected, objects are serialized periodically along with garbage collection. This is the most productive and less reliable mode. It is used together with database backup at the node level and provides better performance for long-term storage of objects with sufficient reliability.
Сохранение объектов в постоянное хранилище осуществляется параллельно различными процессами, обрабатывающими запросы клиентов. Чтобы уменьшить потери, связанные с синхронизацией доступа к единому логическому файлу приращения, в рассматриваемом варианте реализации изобретения применяется отдельный процесс сериализации и очередь запросов к нему. Другие процессы выступают инициаторами сохранения объектов в постоянное хранилище, когда атомарно помещают в очередь процессу сериализации запросы на сохранение объектов. Процесс сериализации пробуждается, когда в его очереди появляются запросы. Он вычитывает все запросы и сериализует объекты этих запросов до тех пор, пока очередь не опустеет. Затем он переводится в состояние ожидания до появления в очереди нового запроса.Saving objects in permanent storage is carried out in parallel by various processes that process customer requests. In order to reduce losses associated with synchronizing access to a single logical increment file, in the considered embodiment of the invention, a separate serialization process and a queue of requests to it are used. Other processes initiate the storage of objects in persistent storage when atomically queuing the serialization requests for saving objects. The serialization process wakes up when requests appear in its queue. It reads all requests and serializes the objects of these requests until the queue is empty. Then it is put on hold until a new request appears in the queue.
Со временем логический файл приращения становится очень большим, и это может замедлить восстановление базы данных из файлов при перезагрузке узла. Чтобы сократить время загрузки базы данных из файлов, требуется периодически создавать новый логический файл снимка базы данных и начинать создание логического файла приращения заново. Это можно осуществлять вручную по команде администратора базы данных или в автоматическом режиме при наступлении какого-то события, например достижения логическим файлом приращения заданной предельной длины.Over time, the increment logical file becomes very large, and this can slow down the recovery of the database from files when the node is rebooted. To reduce the time it takes to load a database from files, you need to periodically create a new logical database snapshot file and start creating the incremental logical file again. This can be done manually at the command of the database administrator or in automatic mode upon the occurrence of some event, for example, when the logical file reaches the increment of the specified limit length.
Новый логический файл снимка базы данных и новый логический файл приращения создаются в фоновом режиме параллельно записи предыдущего файла приращения. На время создания нового логического файла снимка базы данных процесс сериализации объектов записывает одновременно два логических файла приращения - старый и новый. Как только новый снимок базы данных создан, процесс сериализации переключается на запись лишь нового логического файла приращения. Все действия отражаются в логическом файле метаданных. Когда старые логические файлы снимка базы данных и приращения становятся не нужны, они удаляются. Режим удаления может быть ручной или автоматический в зависимости от конфигурации базы данных. В итоге обеспечивается плавное сокращение размера сериализованной базы данных в постоянном хранилище и утилизация дисковой памяти.A new logical database snapshot file and a new logical increment file are created in the background parallel to the recording of the previous increment file. At the time of creating a new logical file for the database snapshot, the process of serializing objects simultaneously writes two logical increment files - the old and the new. As soon as a new database snapshot is created, the serialization process switches to writing only the new logical increment file. All actions are reflected in the logical metadata file. When the old logical database snapshot and increment files are no longer needed, they are deleted. The deletion mode can be manual or automatic, depending on the database configuration. The result is a smooth reduction in the size of the serialized database in persistent storage and disk utilization.
В рассматриваемом варианте реализации изобретения в базе данных во время работы СУБД постоянно накапливается так называемый мусор - ненужные объекты завершившихся пишущих транзакций и устаревшие ревизии объектов базы данных. Среди завершившихся пишущих транзакций к мусору причисляются лишь те объекты, в которых состояние фиксации или отката установлено на всех узлахучастниках. Такие объекты уже не могут понадобиться для выяснения статуса транзакций на каких-либо узлах базы данных. Среди устаревших ревизий объектов базы данных к мусору причисляются лишь те ревизии, в которых временная метка фиксации меньше временной метки любого читающего клиента. Такие ревизии уже недоступны ни одному читающему клиенту в настоящем и будущем.In the present embodiment, the so-called garbage is constantly accumulating in the database during the operation of the DBMS - unnecessary objects of completed writing transactions and obsolete revisions of database objects. Among the completed writing transactions, only those objects in which the state of fixation or rollback is set at all nodes of the participants are counted as garbage. Such objects can no longer be needed to determine the status of transactions on any database nodes. Among obsolete revisions of database objects, only those revisions are considered to be garbage in which the commit timestamp is less than the timestamp of any reading client. Such revisions are no longer available to any reading client in the present and future.
Утилизацией ненужных объектов занимается периодический процесс сборки мусора, запускаемый вDisposal of unnecessary objects is done by the batch process of garbage collection, launched in
- 20 027808 каждом фрагменте базы данных каждого узла СУБД. Параметрами процесса сборки мусора являются две временные метки, обозначаемые как ССNТ и С'С'НО. Временная метка ССNТ задает границу отсечения завершившихся пишущих транзакций, а временная метка ССNО - границу отсечения устаревших ревизий объектов. Значение временной метки ССNТ вычисляется как минимальное значение временной метки фиксации или отката среди всех активных пишущих транзакций. Значение временной метки ССNО вычисляется как минимальное значение среди всех временных меток читающих клиентов.- 20 027808 each database fragment of each DBMS node. The parameters of the garbage collection process are two time stamps, denoted as CCNT and C'C'NO. The CCNT timestamp sets the cutoff border for completed writing transactions, and the CCNO timestamp sets the cutoff border for obsolete object revisions. The value of the CCNT timestamp is calculated as the minimum value of the commit or rollback timestamp among all active writing transactions. The CCNO timestamp value is calculated as the minimum value among all timestamps of reading clients.
Процесс сборки мусора работает следующим образом.The garbage collection process works as follows.
Из списка активных транзакций выбираются зафиксированные или отмененные транзакции, в которых временная метка меньше временной метки ССNТ. В результате формируется список утилизируемых транзакций. Затем для каждой транзакции из этого списка выполняется цикл операций с включенными в транзакцию объектами. Для каждого включенного в транзакцию объекта выполняется поиск ближайшей ревизии, предшествующей временной метке ССNО. Эта ревизия считается старейшей доступной ревизией объекта, все более старые ревизии удаляются. Процесс сборки мусора завершается удалением списка утилизируемых транзакций вместе с включенными в него объектами.From the list of active transactions, committed or canceled transactions are selected in which the timestamp is less than the CCNT timestamp. As a result, a list of utilized transactions is generated. Then, for each transaction from this list, a cycle of operations is performed with the objects included in the transaction. For each object included in the transaction, a search is made for the nearest revision preceding the CCNO timestamp. This revision is considered the oldest available revision of the object; all older revisions are deleted. The garbage collection process is completed by deleting the list of utilized transactions along with the objects included in it.
Временные метки ССNТ и ССNО фрагмента базы данных периодически продвигаются вперед к минимальным значениям временных меток ССNТ и ССNО в других фрагментах базы данных на других узлах. Узлы с помощью вспомогательного системного процесса периодически обмениваются друг с другом сообщениями синхронизации временных меток. В процессе синхронизации вычисляются значения ССNТ и ССNО для фрагмента базы данных своего узла так, как описано выше. Затем собираются значения ССNТ и ССNО с других узлов из других фрагментов базы данных и помещаются в два массива: ССЭТЩ] и ССNО[N], где N - номер узла базы данных. В массивах ССЭТЩ] и ССNО[N] отыскиваются минимальные значения. Временные метки ССNТ и €.'€'N0 собственного фрагмента базы данных продвигаются вперед до этих минимальных значений. Полученные значения ССКГ и ССNО применяются в очередной сборке мусора.The timestamps CCNT and CCNO of a database fragment periodically move forward to the minimum values of timestamps CCNT and CCNO in other database fragments at other nodes. The nodes using the auxiliary system process periodically exchange time synchronization messages with each other. In the synchronization process, the values of CCNT and CCNO are calculated for the database fragment of its node as described above. Then, the values of CCNT and CCNO are collected from other nodes from other fragments of the database and placed in two arrays: SSETSC] and CCNO [N], where N is the number of the database node. In the SSETSH] and SSNO [N] arrays, the minimum values are searched. The CCNT and €. '€' N0 timestamps of the native database fragment move forward to these minimum values. The obtained values of SSCG and CCNO are used in the next garbage collection.
Узел может содержать фрагменты нескольких баз данных. Это значит, что пара массивов ССКГЩ] и ССNО[N] существует в каждом фрагменте каждой базы данных, и на узле этих пар может быть много. Вспомогательный системный процесс узла обновляет все пары массивов всех фрагментов всех баз данных.A node may contain fragments of several databases. This means that a pair of arrays ССКГЩ] and ССNО [N] exists in each fragment of each database, and there can be many of these pairs on the node. The auxiliary system process of the node updates all pairs of arrays of all fragments of all databases.
Рассматриваемое изобретение является масштабируемой системой управления базой данных. Масштабирование означает увеличение или уменьшение количества узлов базы данных с целью управления готовностью и размером базы данных. В настоящем изобретении масштабирование выполняется следующими способами: добавление или удаление координатора транзакций, добавление узла в карту размещения первичного индекса, добавление или удаление узла в карте размещения вторичного индекса, добавление узла в схему размещения файлов.The subject invention is a scalable database management system. Scaling means increasing or decreasing the number of database nodes in order to control the availability and size of the database. In the present invention, scaling is performed in the following ways: adding or removing a transaction coordinator, adding a node to a primary index allocation map, adding or removing a node to a secondary index allocation map, adding a node to a file allocation scheme.
Все перечисленные способы могут использоваться в любой комбинации. Рассмотрим их на примере масштабирования системы, показанной на фиг. 13, до вариантов, показанных на фиг. 14. Общие для всех фигур чертежей детали системы: клиенты 21, посылающие запросы в вычислительную сеть клиентов 22 на устройство балансировки запросов 23, узлы-координаторы 184, принимающие запросы клиентов с устройства балансировки запросов 23 через вычислительную сеть клиентов 22, узлы-участники 183, соединенные с узлами-координаторами 184 через вычислительную сеть узлов 24 и обрабатывающие команды узлов-координаторов 184. На фиг. 13 узлы N4 и N5 работают в роли координаторов транзакций, узлы N1 и N2 работают в роли участников транзакций.All of these methods can be used in any combination. Let us consider them using the example of scaling the system shown in FIG. 13, to the options shown in FIG. 14. General details of all the drawings of the system details: clients 21 sending requests to the client computer network 22 to the request balancing device 23, coordinating nodes 184 receiving client requests from the request balancing device 23 through the client computer network 22, member nodes 183, connected to coordinating nodes 184 through a computer network of nodes 24 and processing commands of coordinating nodes 184. FIG. 13, nodes N4 and N5 work as transaction coordinators, nodes N1 and N2 work as participants in transactions.
Вариант масштабирования 185 на фиг. 14 представляет собой систему, в которую добавлен узелкоординатор N6. Новый узел N6 не участвует в хранении данных, поэтому добавление узла выполняется очень быстро - достаточно включить новый узел в вычислительную сеть клиентов 22, вычислительную сеть узлов 24 и зарегистрировать узел на устройстве балансировки запросов 23. Добавление узла в роли координатора транзакций позволяет перераспределить создаваемую клиентами нагрузку, уменьшить время ответа системы и в итоге - повысить готовность базы данных. Удаление узла-координатора позволяет высвободить избыточные ресурсы, когда нагрузка на систему спадает.Scaling option 185 in FIG. 14 is a system to which the N6 coordinator has been added. The new node N6 is not involved in data storage, so adding a node is very fast - just turn on the new node in the client computer network 22, the computer network of nodes 24 and register the node on the query balancing device 23. Adding a node as a transaction coordinator allows you to redistribute the load created by clients reduce the response time of the system and, as a result, increase the availability of the database. Removing the coordinator node allows you to free up excess resources when the load on the system decreases.
Вариант масштабирования 186 на фиг. 14 представляет собой систему, в которую добавлен узелучастник N3.Scaling option 186 in FIG. 14 is a system to which an N3 subassembly has been added.
Вариант масштабирования 187 на фиг. 14 представляет собой систему, в которую добавлен узел N3, выступающий одновременно в роли координатора и участника транзакций. Добавление узла-участника позволяет увеличить размер базы данных и перераспределить нагрузку, создаваемую внутренними запросами системы. Новый узел может участвовать в хранении данных первичного индекса, данных вторичных индексов, данных файлов. Допустимы любые комбинации такого применения нового узла.Scaling option 187 in FIG. 14 is a system to which node N3 has been added, acting simultaneously as a coordinator and a participant in transactions. Adding a member node allows you to increase the size of the database and redistribute the load created by the internal queries of the system. The new node can participate in storing primary index data, secondary index data, file data. Any combination of this application of the new assembly is permissible.
Если узел добавляется для хранения данных первичного индекса, в карте размещения первичного индекса создается новое распределение объектов. Новое распределение может задействовать лишь новый узел или новый узел в комбинации с другими узлами. В любом случае перераспределение существующих объектов среди узлов не происходит, новое распределение действует лишь для вновь создаваемых объектов.If a node is added to store primary index data, a new distribution of objects is created in the primary index allocation map. A new distribution can only involve a new node or a new node in combination with other nodes. In any case, the redistribution of existing objects among nodes does not occur; the new distribution is valid only for newly created objects.
Если узел добавляется в карту размещения вторичного индекса или удаляется из нее, выполняетсяIf the node is added to or removed from the secondary index allocation map,
- 21 027808 перераспределение вторичного индекса среди узлов базы данных. В зависимости от размера вторичного индекса и объема перемещаемых данных, перераспределение вторичного индекса может занимать некоторое ощутимое для клиентов базы данных время. В течение этого времени база данных может быть доступна клиентам только на чтение или не доступна.- 21 027808 redistribution of the secondary index among the database nodes. Depending on the size of the secondary index and the volume of data being moved, the redistribution of the secondary index may take some noticeable time for database clients. During this time, the database may be read-only or unavailable to clients.
Если узел добавляется для хранения данных файлов, в схеме размещения файлов создается новое правило размещения новых файлов. Схема размещения файлов аналогична показанной на фиг. 7 карте размещения первичного индекса с той лишь разницей, что вместо распределений с диапазонами в схеме размещения файлов задаются правила распределения файлов среди набора узлов. Каждое правило включает список узлов и размер блока данных, непрерывно записываемый на каждый узел и дублируемый на соседнем узле (или соседних узлах) в соответствии с заданным в конфигурации базы данных уровнем резервирования. Таких правил может быть много. Последнее по времени создания правило применяется для вновь создаваемых файлов. Остальные правила являются историческими и применяются для чтения и записи уже созданных файлов.If a node is added to store file data, a new rule for placing new files is created in the file allocation scheme. The file allocation scheme is similar to that shown in FIG. 7 of the primary index allocation map with the only difference being that instead of distributions with ranges in the file allocation scheme, rules for distributing files among a set of nodes are set. Each rule includes a list of nodes and a data block size that is continuously recorded on each node and duplicated on a neighboring node (or neighboring nodes) in accordance with the backup level specified in the database configuration. There can be many such rules. The most recent rule is applied to newly created files. The remaining rules are historical and apply to reading and writing files that have already been created.
Таким образом, реализуются все перечисленные выше способы масштабирования базы данных в настоящем изобретении.Thus, all of the above methods for scaling the database in the present invention are implemented.
В итоге, обычному специалисту в данной области должно быть очевидно, что система, построенная в соответствии с предложенным изобретением, является многопользовательской распределенной системой обработки данных. Эта система обеспечивает атомарность, согласованность, изолированность и надежность операций с данными. При этом она обеспечивает высокую степень готовности, отказоустойчивости и масштабируемости.As a result, it should be obvious to an ordinary person skilled in the art that the system constructed in accordance with the proposed invention is a multi-user distributed data processing system. This system provides atomicity, consistency, isolation and reliability of data operations. At the same time, it provides a high degree of availability, fault tolerance and scalability.
Изобретение раскрыто в некоторых вариантах реализации. Должно быть очевидно, что раскрытое устройство может быть реализовано с модификациями, не отступая от изобретения. Приложенная формула изобретения покрывает все множество вариаций и модификаций, находящихся в рамках сущности настоящего изобретения.The invention is disclosed in certain embodiments. It should be obvious that the disclosed device can be implemented with modifications without departing from the invention. The appended claims cover all the many variations and modifications that are within the spirit of the present invention.
Claims (1)
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EA201500340A EA027808B1 (en) | 2015-01-22 | 2015-01-22 | Database management system |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EA201500340A EA027808B1 (en) | 2015-01-22 | 2015-01-22 | Database management system |
Publications (2)
Publication Number | Publication Date |
---|---|
EA201500340A1 EA201500340A1 (en) | 2016-07-29 |
EA027808B1 true EA027808B1 (en) | 2017-09-29 |
Family
ID=56550593
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
EA201500340A EA027808B1 (en) | 2015-01-22 | 2015-01-22 | Database management system |
Country Status (1)
Country | Link |
---|---|
EA (1) | EA027808B1 (en) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2666287C1 (en) * | 2017-03-31 | 2018-09-06 | Александр Олегович Попов | Method of development, storage and use of compiled to the binary representation of programs in database tables |
CN114880401B (en) * | 2022-01-17 | 2024-08-27 | 北京奥星贝斯科技有限公司 | Method and device for processing transaction |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2409848C2 (en) * | 2005-10-28 | 2011-01-20 | Медиарайф Местль Унд Райф Коммуникационс-Унд Информационстехнологиен Оег | Method of managing relational database system |
US20110231447A1 (en) * | 2010-03-18 | 2011-09-22 | Nimbusdb Inc. | Database Management System |
US20120254175A1 (en) * | 2011-04-01 | 2012-10-04 | Eliot Horowitz | System and method for optimizing data migration in a partitioned database |
US20130290249A1 (en) * | 2010-12-23 | 2013-10-31 | Dwight Merriman | Large distributed database clustering systems and methods |
US20140280276A1 (en) * | 2013-03-15 | 2014-09-18 | Tactile, Inc. | Database sharding by shard levels |
-
2015
- 2015-01-22 EA EA201500340A patent/EA027808B1/en not_active IP Right Cessation
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
RU2409848C2 (en) * | 2005-10-28 | 2011-01-20 | Медиарайф Местль Унд Райф Коммуникационс-Унд Информационстехнологиен Оег | Method of managing relational database system |
US20110231447A1 (en) * | 2010-03-18 | 2011-09-22 | Nimbusdb Inc. | Database Management System |
US20130290249A1 (en) * | 2010-12-23 | 2013-10-31 | Dwight Merriman | Large distributed database clustering systems and methods |
US20120254175A1 (en) * | 2011-04-01 | 2012-10-04 | Eliot Horowitz | System and method for optimizing data migration in a partitioned database |
US20140280276A1 (en) * | 2013-03-15 | 2014-09-18 | Tactile, Inc. | Database sharding by shard levels |
Also Published As
Publication number | Publication date |
---|---|
EA201500340A1 (en) | 2016-07-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11461356B2 (en) | Large scale unstructured database systems | |
JP7410181B2 (en) | Hybrid indexing methods, systems, and programs | |
CN111338766B (en) | Transaction processing method and device, computer equipment and storage medium | |
US8504523B2 (en) | Database management system | |
US10078682B2 (en) | Differentiated secondary index maintenance in log structured NoSQL data stores | |
US7546284B1 (en) | Virtual message persistence service | |
US8261020B2 (en) | Cache enumeration and indexing | |
CN110196885B (en) | Cloud distributed real-time database system | |
CN107908503A (en) | Recover database from standby system streaming | |
CN102033912A (en) | Distributed-type database access method and system | |
CN104067216A (en) | System and method for implementing a scalable data storage service | |
CN111597015A (en) | Transaction processing method and device, computer equipment and storage medium | |
CN115114374A (en) | Transaction execution method and device, computing equipment and storage medium | |
US20130006920A1 (en) | Record operation mode setting | |
EA027808B1 (en) | Database management system | |
Pankowski | Consistency and availability of Data in replicated NoSQL databases | |
Hiraga et al. | Scalable Distributed Metadata Server Based on Nonblocking Transactions. | |
Sapate et al. | Survey on comparative analysis of database replication techniques | |
Pandey et al. | Persisting the AntidoteDB Cache: Design and Implementation of a Cache for a CRDT Datastore | |
Cao | Big Data Database for Business | |
Oo | A Framework for Consistency Control of Replicated Data in Distributed Environment | |
Bukhari et al. | NoSQL Data Stores | |
Chi | The design of partitioned distributed database directories. | |
Šalata | Configurable Consistency for Distributed Systems |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
MM4A | Lapse of a eurasian patent due to non-payment of renewal fees within the time limit in the following designated state(s) |
Designated state(s): AM AZ KZ KG TJ TM |
|
NF4A | Restoration of lapsed right to a eurasian patent |
Designated state(s): AM AZ KZ KG |
|
MM4A | Lapse of a eurasian patent due to non-payment of renewal fees within the time limit in the following designated state(s) |
Designated state(s): AM |