+4420 3290 2266


Project Haala


Abyss entry Implementation details

Abyss domain object is storage for arbitrary data of any text-like format. It is not connected to any other object and therefore may vanish without a trace. Abyss is used to store data which the system may never need or to store temporary data. For instance, one may use abyss entry to record user actions for later review, storing a username and action type in its body and then search for those abyss entries when need arises.

Rather than create separate domain objects for each particular case, one could use abyss entries. This comes with the price of using proprietary logic while parsing abyss data into proper objects as the data is stored in a single database field. For instance, abyss may store payment bill data. Bill does not have its own database table but since it is only text and does not have dependencies on other domain objects then it may use abyss to store its data. Whenever a particular bill needs to be retrieved, abyss entry is read and its data parsed into a bill object by the payment service. In other words, abyss is a storage space for any text data as long as the service can retrieve an appropriate entry and parse it. 

Special task exists to delete expired abyss entries from a database thus there is no need for manual deletion. Abyss piles up and the task deletes expired entries. 


Abyss domain object structure is very simple. Containing just metadata and text. Metadata is used to store data such as abyss type, key and search fields, formatted as key=value. Abyss text is not formatted and its up to an appropriate parser to deal with it.

ID and key

Abyss entry can be queried by ID or key. When the system needs to embed abyss into publicly available resource, it generates random key and then embeds it. Whoever sees the resource is not aware of any IDs which may prevent possible hacking (that is unless the hacker reads this article). However, the key itself contains ID surrounded by random symbols, which is formatted as K[random chars][hex ID].

Search and metadata

Since there could be huge amount of abyss entries, Solr is used to perform search. But how the service operating on bills knows which abyss entry may be parsed into a bill object? The service does not have links to entries and there could be thousands of those in different formats. The answer is abyss metadata as it contains search fields and values submitted to Solr, so the only thing the service needs is to provide the proper query to retrieve bill abyss entries in the format it can parse.