Identifier |
Information |
The Identifier type is one of the most important one. It provides the features and properties expected by an Object Identifier (OID) and coming from the OO Identity axiom. This in an architecture fully distributed and scalable. This features and properties are:
- Identify an object all long its technical life cycle (in memory, over the network, on stable storage).
This suppose to have versioning management including historical capabilities.
- Designated it in all situations (textual link, binary address, on disk, over the network, etc.).
- Help to scale in being both performing (thru technique like direct reference, partitioning or cursor) and small (this mean 64 bit memory foot print).
- Help to secure in being attached to logical partitioning (organisation, universe).
- Allows to search and retrieve an Object in an uniform way.
- Clean: This mean not contaminated in its core by numerous peripheral information like localization or external identifiers.
The Identifier type fulfill these requirements:
- Identify is the first feature. It is the Object id property role. While this is the final ID to identify an Object on any Node or state, it is complemented by its main Class, the one that never changes all long it's life: In other words, its Nature. The nature is also a property named Nature classifier id. This ID is the Object id of the Classifier the object belongs to. The algorithm to manage Object id depends of the Type.
- versioning is supported thru the Object version id property and the New version query. The algorithm to manage Object version id also depends of the Type.
- Designation in memory is done just by its physical address. Getting the full Identifier is a lazy treatment done thru the identity property of the Object class. The Class object is loaded in memory and the object has a pointer to it. A Class is a versioned object thru Edition, so its version is known.
Designation of a stored object can be done in several ways. In short, if you have the Identifier then a direct reference to the Node operating system can be done. Ask to it to provide the object whenever it resides. If you don't have the Identifier completed, a search with available criteria can be done also to the Node operating system that will make its best effort to retrieve it.
- Indexing and Partitioning are key factors for efficiency. Indexing is promoted to be applied for each Class and Interface, the storage being done by Nature of Objects. Identifier fields are all indexed. Other fields can be indexed thru a use case of the Operating System.
Partitioning is supported over several axis. A universe providing a complete isolation. A Zone allowing an organizational separation. A Group giving a functional dependent partitioning capability. It is also a use case of the O.S. Finally, archiving can also be seen as a form of partitioning where older objects are moved to slowest Nodes. Algorithms on allocating Object id and mostly Object version id can play a great role here.
- While Identifier fields are available in a uniform way on every Objects, this provides a common basis to search any of them. This is the case in particular for the Business id, that can be of course composite.
|
Note |
Kind |
Explanation |
Text |
It is necessary to have a Nature classifier for several reasons:
- The Nature makes much more easier the object retrieval, because it gives a coarse grained partition of the object space (over other objects on a node, over nodes). This dramatically improve performance, and even makes the whole OO approach conceivable.
- In order to generate an object id that doesn't collide with another one. Otherwise, it will be needed to have something like a GUID with 128 bits: doing things this way breaks the 64 bits principle. So it is rejected.
Therefore references an object just require a 64 bit, that is to say the minimum permitted size in ISA.
- In fact having a Nature also allows to ensure that an object will not become anything along its life. A car becoming a person for instance. This improve semantic consistency
How to handle the Nature identifier ? In particular for Objects has numerous has they are. Because the object must know of which class version it belongs to. Otherwise, it will be very difficult to manage class version to run side by side or and costly to manage migrations.
- The ISA solution is to be both clean and efficient. To be clean, it is needed to have separated properties for all data (this consume space). To be efficient, it is needed to have the smallest memory foot print, therefore just a sbyte of 64 bits (this is quick for processing and the smallest possible).
- 2 representations are foreseen:
- A sbyte reference to class object. At runtime, in memory for instance, the O.S. points to the class object memory address.
- An Identifier that is lazily loaded, containing a full identification across the Universes and their Nodes. Here the space is not a concern, on storage for instance.
The sbyte pointer to the Class is sufficient to supports versioning, because a class has an edition property (with a version). The stable classification mechanism is supported by the Category metaclass. |
|
Fields |
Zone ID |
The zone ID maps to an organization.
Organization may be certified or not. In order to avoid ID collision, some rule are needed => TODO PUT THAT RULE UNDER INVARIANTS AND ADD A CERTIFICATE LINK/FIELD TO ORGANIZATION.
Certified organizations can produce a public certificate delivered by an authority. This authority is typically a country or an international organization.
In this case the Zone ID have the following format:
- Bit 64: 1
- Bits 51 to 63: The ISO 3166-1 numeric code (8192 rooms).
- Bits 1 to 50: Number attributed by the authority.
Uncertified organization are allocated by any other organism. Typical organism are search engines.
The organism can check the validity of the Zone ID but not certify the identity.
In this case the Zone ID have the following format:
- Bit 64: 0
- Bits 51 to 63: Reserved to organism (8192 rooms).
- Bits 1 to 50: Number attributed by the organism.
Note kind |
Explanation |
Text |
Using a given Zone ID is not neutral. It is crucial in many cases to be able to prove that any object claiming to be of a given organization is really issued of it. That's why a Zone ID can be attributed associated with a public certificate.
In an Initializer, the hash check and encoding (at least of the hash check) with the private key ensure the objevct provenance.
Organization can also be more lax internally thru Uncertified organization, or even completly free by n ot providing Zone ID. |
|
Object id |
Object id is a Sbyte. It is built by an algorithm defined for its Nature.
A post is dedicated to the generation algorithms of Object id and Object version id. |
Object version id |
Object version id is a Sbyte. It is built by an algorithm defined for its Nature.
A post is dedicated to the generation algorithms of Object id and Object version id. |
|
|
|
|
|