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 created

The 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/json

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

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: GET

Response 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

-

OpenLMIS: the global initiative for powerful LMIS software