[ 
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)

Reply via email to