[
https://issues.apache.org/jira/browse/FINERACT-2097?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Adam Saghy updated FINERACT-2097:
---------------------------------
Description:
Part 3 - introduce string type keys
Why do we need support for String type primary keys?
Because
- generating a String type key is much faster than calculate the incremental
next decimal value
- Stateless, it can be generated on the fly
- already known before the entity is saved
- globally unique: different entities and distributed systems, hosts/tenants
could not produce exactly the same value
- sense of security since the malicious users can't guess the ID
- we advise to use nanoId, because it is tiny, secure, URL-friendly,
cryptographically strong, has no mandatory dependencies, 60% faster than UUID
and we can control the behaviour of alphabets to be used
- disadvantages:
** not naturally sortable according to creation time - for that we introduced
created_on_utc with nanoseconds
** less user readable - suggest to have a user friendly name instead the
primary key
What has changed?
part 1 (FINERACT-2091):
* AbstractPersistableCustom interface generic type id: T extends Serializable
- instead of Long
this change effects all entity codes but transparent for the users
part 2 (FINERACT-2095):
* enum type response data EnumOptionData is also generic and has a special
StringEnumOptionData
part 3 (FINERACT-2097):
* general APIs like command, datatables, journal entries and notes are now
working with Serializable keys (not only Long)
* general services of command, datatables, journal entries and notes were
extended to handle Serializable keys
* model extensions, new columns to store string type ids:
** m_portfolio_command_source.resource_identifier varchar(100)
** acc_product_mapping.product_identifier char(21)
** m_note.entity_identifier varchar(40)
* dependency of com.aventrix.jnanoid:jnanoid:2.0.0
was:
Part 3 - introduce string type keys
Why do we need support for String type primary keys?
Because
- generating a String type key is much faster than calculate the incremental
next decimal value
- Stateless, it can be generated on the fly
- already known before the entity is saved
- globally unique: different entities and distributed systems, hosts/tenants
could not produce exactly the same value
- sense of security since the malicious users can't guess the ID
- we advise to use nanoId, because it is tiny, secure, URL-friendly,
cryptographically strong, has no mandatory dependencies, 60% faster than UUID
and we can control the behaviour of alphabets to be used
- disadvantages:
** not naturally sortable according to creation time - for that we introduced
created_on_utc with nanoseconds
** less user readable - suggest to have a user friendly name instead the
primary key
What has changed?
part 1:
* AbstractPersistableCustom interface generic type id: T extends Serializable
- instead of Long
this change effects all entity codes but transparent for the users
part 2:
* general APIs like command, datatables, journal entries and notes are now
working with Serializable keys (not only Long)
* general services of command, datatables, journal entries and notes were
extended to handle Serializable keys
* model extensions, new columns to store string type ids:
** m_portfolio_command_source.resource_identifier varchar(100)
** acc_product_mapping.product_identifier char(21)
** m_note.entity_identifier varchar(40)
* dependency of com.aventrix.jnanoid:jnanoid:2.0.0
> Introduce String type keys - Part 3
> -----------------------------------
>
> Key: FINERACT-2097
> URL: https://issues.apache.org/jira/browse/FINERACT-2097
> Project: Apache Fineract
> Issue Type: Improvement
> Reporter: Adam Saghy
> Priority: Major
>
> Part 3 - introduce string type keys
> Why do we need support for String type primary keys?
> Because
> - generating a String type key is much faster than calculate the incremental
> next decimal value
> - Stateless, it can be generated on the fly
> - already known before the entity is saved
> - globally unique: different entities and distributed systems, hosts/tenants
> could not produce exactly the same value
> - sense of security since the malicious users can't guess the ID
> - we advise to use nanoId, because it is tiny, secure, URL-friendly,
> cryptographically strong, has no mandatory dependencies, 60% faster than UUID
> and we can control the behaviour of alphabets to be used
> - disadvantages:
> ** not naturally sortable according to creation time - for that we
> introduced created_on_utc with nanoseconds
> ** less user readable - suggest to have a user friendly name instead the
> primary key
> What has changed?
> part 1 (FINERACT-2091):
> * AbstractPersistableCustom interface generic type id: T extends
> Serializable - instead of Long
> this change effects all entity codes but transparent for the users
> part 2 (FINERACT-2095):
> * enum type response data EnumOptionData is also generic and has a special
> StringEnumOptionData
> part 3 (FINERACT-2097):
> * general APIs like command, datatables, journal entries and notes are now
> working with Serializable keys (not only Long)
> * general services of command, datatables, journal entries and notes were
> extended to handle Serializable keys
> * model extensions, new columns to store string type ids:
> ** m_portfolio_command_source.resource_identifier varchar(100)
> ** acc_product_mapping.product_identifier char(21)
> ** m_note.entity_identifier varchar(40)
> * dependency of com.aventrix.jnanoid:jnanoid:2.0.0
--
This message was sent by Atlassian Jira
(v8.20.10#820010)