Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: clarify the two different barcodes

...

These are only a very high level comparison of the characteristics, there are lots of alternative designs in both of these categories that lead to different characteristics.

Where is the data kept?


MemoryPostgreSQL
Volatilitylost when the module instance is terminatedretained even if module instances are terminated
Localitylocal copies for each module instanceshared between module instances
Access Controlshared needs to be controlled with code within the modulecan be controlled using mechanisms provided by the database server
ResponsivenessLikely faster if cached value is present, likely slower if  notDependent upon network and database load
Record Type SuitabilityBetter suited to smaller sets that change rarely, e.g. reference typesCan be used for any kind of record type
Infrastructure needsNoneRequires a database for mod-circulation

How is the copied data updated?


Periodic HTTP requestsMessages consumed from Kafka
Freshness

Dependent upon frequency of periodic refresh.

Likely to be lead to data being stale for longer than with messaging

Dependent upon message processing latency
Access requirementsNeeds a system user or module permissions granting to a timer endpointNeeds access to Kafka topics for every record type (assuming record snapshot based messages as used with mod-search)
Initial population / manual state refreshRequires requests to fetch all records for for all cached records typesEither requires reprocessing of persistent topic (not currently allowed by FOLIO standards) or custom process (similar to mod-search re-index process)
Load on other modules during synchronisationCould be significant. Dependent upon number of record types and quantity of recordsPotentially none with persistent topics (not currently allowed by FOLIO standards)
Freshness measurement




Combine the business logic and storage modules together

...

IntentEndpointDestination Module

Sample Response Time (ms)

Sample Response Time of Token Check (ms)
Initial request


99
Fetch user (making the request)GET /users/{id}mod-users6
Fetch permissionsGET /perms/users?query=userId=={id}mod-permissions16
Generate downstream token

12
Fetch user (patron) by barcodeGET /users?query=barcode=={barcodeuserBarcode}mod-users1386
Fetch manual blocksGET /manualblocks?query=userId=={userId}mod-feesfines1337
Fetch automated blocksGET /automated-patron-blocks/{userId}mod-patron-blocks546*27
Fetch item by barcodeGET /item-storage/items?query=barcode=={barcodeitemBarcode}mod-inventory-storage163**10
Fetch holdingsGET /holdings-storage/holdings/{id}mod-inventory-storage579
Fetch instanceGET /instance-storage/instances/{id}mod-inventory-storage227
Fetch locationGET /locations/{id}mod-inventory-storage913
Fetch libraryGET /location/units/libraries/{id}mod-inventory-storage107
Fetch campusGET /location/units/campuses/{id}mod-inventory-storage107
Fetch institutionGET /location/units/institutions/{id}mod-inventory-storage117
Fetch service pointGET /service-points/{id}mod-inventory-storage98
Fetch material typeGET /material-types/{id}mod-inventory-storage87
Fetch loan typeGET /loan-types/{id}mod-inventory-storage228
Fetch existing loansGET /loan-storage/loans?query=status.name=="Open" and itemId=={itemId}mod-circulation-storage917
Fetch requestsGET /request-storage/requests?query=itemId=={itemId} and status==("Open - Not yet filled" or "Open - Awaiting pickup" or "Open - In transit" or "Open - Awaiting delivery") sortBy position/sort.ascendingmod-circulation-storage109
Fetch circulation rulesGET /circulation/rulesmod-circulation-storage1818
Fetch loan policyGET /loan-policy-storage/loan-policies/{id}mod-circulation-storage108
Fetch tenant localeGET /configurations/entries?query=module=="ORG" and configName=="localeSettings"mod-configuration1610
Fetch overdue fines policiesGET /overdue-fines-policies/{id}mod-feesfines198
Fetch lost item fees policiesGET /lost-item-fees-policies/{id}mod-feesfines1110
Fetch opening daysGET /calendar/periods/7068e104-aa14-4f30-a8bf-71f71cc15e07/calculateopening?requestedDate={{dueDate}}mod-calendar128
Fetch user (patron) groupsGET /groups?query=id=={groupId}mod-users177
Update item statusPUT /item-storage/items/{id}mod-inventory-storage19413
Create loanPOST /loan-storage/loanmod-circulation-storage168
Update (question) patron action sessionPOST /patron-action-session-storage/patron-action-sessionsmod-circulation-storage107
Fetch userGET /users/{id}mod-users615
Fetch patron notice policy

GET /patron-notice-policy-storage/patron-notice-policies/1a821238-0cd9-48d9-a71a-057d33df0154

mod-circulation-storage67

...