Overview
The following document contains information about FHIR servers performance: Hearth and HAPI FHIR. Tests contain create, update and read actions on a location resource. Each section presents the request structure and response times. To execute tests, the Taurus tool has been used. The following machine has been used for tests:
Memory: 7.7 GiB
Processor: Intel Core i7-6700HQ 2.60GHz x 8
Graphics: GeForce GTX 960M/Pcie/SSE2
OS: Ubuntu 18.04.1 LTS (64-bit)The following variables have been set and used to avoid duplication in tests. Some of them are used in request bodies.
fhir-server-url: http://localhost/fhir # Hearth
http://localhost/hapifhir/baseDstu3 # HAPI FHIR
scenario-iterations: # how many times a scenario/test will be executed
scenario-concurrency: 1 # how many users will execute the given scenario/test
identifier_value: # this value is generated for each location resource so searching by identifier always returns a single resource
location_id: # set by a FHIR server when a resource is createdThe sample column presents the number of iterations/resources. The memory limit presents if memory limit has been set for FHIR servers and how big it was. The mem column presents how much memory was used by the docker container before and after all tests - that is why values are the same in all result tables. The avg column presents the average time of waiting for a response from all request. The p90 column presents times of 90% of all results (in this case 900 requests). Result times in columns are in milliseconds.
Create a new location
Note: When an X test is being executed, there are X - 1 resources in the FHIR server. For the first resource creation, the FHIR server will not contain any resources.
Request body
URL: ${fhir-server-url}/Location
Method: POST
Headers:
Content-Type: application/json
Body:
{
resourceType: "Location",
alias: [ "N007" ],
identifier: {
{ system: "urn:ietf:rfc:3986", value: "https://test.openlmis.org/api/programs/418bdc1d-c303-4bd0-b2d3-d8901150a983" },
{ system: "urn:ietf:rfc:3986", value: "https://test.openlmis.org/api/facilityTypes/ac1d268b-ce10-455f-bf87-9c667da8f060" },
{ system: "urn:ietf:rfc:3986", value: "https://test.openlmis.org/api/facilityOperators/9456c3e9-c4a6-4a28-9e08-47ceb16a4121" },
{ system: "https://test.openlmis.org", value: ${identifier_value} }
},
name: "Lurio, Cuamba",
position: {
longitude: 36.852509
latitude: -14.78975
},
physicalType: {
coding: [
{ system: "http://hl7.org/fhir/location-physical-type", code: "si", display: "Site" }
]
},
partOf: {
reference: "https://test.openlmis.org/api/Location/9b8cfb5a-217a-4261-a64f-16ca06ae79fa"
},
status: "active"
}Response times
FHIR server | Sample | Memory limit | 1st attempt | 2nd attempt | 3rd attempt | 4th attempt | 5th attempt | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | |||
Hearth | 1 000 | no limit | - | 3 | 4 | - | 3 | 4 | - | 3 | 5 | - | 3 | 5 | - | 3 | 4 |
HAPI FHIR | - | 105 | 172 | - | 107 | 176 | - | 106 | 174 | - | 106 | 176 | - | 105 | 172 | ||
Hearth | 10 000 | no limit | 158MiB/118MiB | 2 | 4 | 175MiB/165MiB | 2 | 4 | 172MiB/136MiB | 3 | 4 | - | - | - | - | - | - |
HAPI FHIR | 992MiB/1.399GiB | 103 | 176 | 982MiB/1.442GiB | 70 | 129 | 957MiB/1.357GiB | 102 | 172 | - | - | - | - | - | - | ||
Update the location
Note: When an X test is being executed, there are X - 1 resources in the FHIR server. For the first resource update, the FHIR server will contain a single resource.
Request body
URL: ${fhir-server-url}/Location
Method: PUT
Headers:
Content-Type: application/json
Body:
{
resourceType: "Location",
alias: [ "N007" ],
identifier: {
{ system: "urn:ietf:rfc:3986", value: "https://test.openlmis.org/api/programs/418bdc1d-c303-4bd0-b2d3-d8901150a983" },
{ system: "urn:ietf:rfc:3986", value: "https://test.openlmis.org/api/facilityTypes/ac1d268b-ce10-455f-bf87-9c667da8f060" },
{ system: "urn:ietf:rfc:3986", value: "https://test.openlmis.org/api/facilityOperators/9456c3e9-c4a6-4a28-9e08-47ceb16a4121" },
{ system: "https://test.openlmis.org", value: ${identifier_value} }
},
name: "Lurio, Cuamba (Updated)",
position: {
longitude: 36.852509
latitude: -14.78975
},
physicalType: {
coding: [
{ system: "http://hl7.org/fhir/location-physical-type", code: "si", display: "Site" }
]
},
partOf: {
reference: "https://test.openlmis.org/api/Location/9b8cfb5a-217a-4261-a64f-16ca06ae79fa"
},
status: "active"
}
Response times
FHIR server | Sample | Memory limit | 1st attempt | 2nd attempt | 3rd attempt | 4th attempt | 5th attempt | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | |||
Hearth | 1 000 | no limit | - | 5 | 6 | - | 5 | 7 | - | 5 | 7 | - | 5 | 7 | - | 4 | 5 |
HAPI FHIR | - | 115 | 183 | - | 119 | 187 | - | 114 | 182 | - | 114 | 183 | - | 115 | 184 | ||
Hearth | 10 000 | no limit | 158MiB/118MiB | 12 | 19 | 175MiB/165MiB | 13 | 20 | 172MiB/136MiB | 13 | 20 | - | - | - | - | - | - |
HAPI FHIR | 992MiB/1.399GiB | 112 | 179 | 982MiB/1.442GiB | 76 | 143 | 957MiB/1.357GiB | 114 | 181 | - | - | - | - | - | - | ||
Get a location by an id
Note: When an X test is being executed, there are X - 1 resources in the FHIR server. For the first resource search, the FHIR server will contain only one resource.
Request body
URL: ${fhir-server-url}/Location/${location_id}
Method: GET
Headers:
Accept: application/jsonResponse times
FHIR server | Sample | Memory limit | 1st attempt | 2nd attempt | 3rd attempt | 4th attempt | 5th attempt | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | |||
Hearth | 1 000 | no limit | - | 3 | 4 | - | 3 | 4 | - | 3 | 4 | - | 3 | 4 | - | 2 | 3 |
HAPI FHIR | - | 5 | 9 | - | 6 | 10 | - | 5 | 9 | - | 5 | 9 | - | 5 | 9 | ||
Hearth | 10 000 | no limit | 158MiB/118MiB | 6 | 10 | 175MiB/165MiB | 6 | 10 | 172MiB/136MiB | 7 | 10 | - | - | - | - | - | - |
HAPI FHIR | 992MiB/1.399GiB | 4 | 8 | 982MiB/1.442GiB | 4 | 7 | 957MiB/1.357GiB | 4 | 7 | - | - | - | - | - | - | ||
Search single location by an identifier
Note: When an X test is being executed, there are X - 1 resources in the FHIR server. For the first resource search, the FHIR server will contain only one resource.
Request body
URL: ${fhir-server-url}/Location?identifier=https://test.openlmis.org|${identifier_value}
Method: GETResponse times
FHIR server | Sample | Memory limit | 1st attempt | 2th attempt | 3th attempt | 4th attempt | 5th attempt | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | mem | avg | p90 | |||
Hearth | 1 000 | no limit | - | ||||||||||||||