Hi there,
I have a small question on an Orthanc Plugin we want to build.
Historically Orthanc has a slow API for getting the ZIP archive that have been clearly improved by ZIP streaming of response.
Now the ZIP straming start almose immediatly, but the transfer speed depends on the ability of Orthanc to retrieve instances from the storage system (for instance my testing server is delivering 5Mo/sec which is good but does not saturate my bandwith of 12Mo/sec that I was reaching when the file was prepared in server side).
In a discussion I got while ago with Alain, he told me that this API retrieve instances synchronously with a single thread.
We are about to work on a python plugin for Orthanc that will try to retrive these instances asynchrously with 3 parrallele threads.
I think this could lead to performance improvement especially if you have the dicom in buckets as this bucket should not slow down for parrallel request.
And additionally it will be a first exercice for us to make a plugin in Orthanc and make our learning curve (GPL licenced of course)
So my questions would be :
- Am I correct in my assumption that async file reading can improve this archive speed ? (assuming we have a cloud database and cloud bucket that will handle multithreding)
- In this plugin, to identify the instance to retrieve we will call the Study|Series/{orthancID}/instance by an http call to orthanc itself to build to array of the instance to collect. Is it good to use the http call from plugin or should be always prefer to use internal methods ?
- I see the plugin can return a buffer response to Orthanc. So I guess if we build the zip as a stream in python we will be able to transform it to buffer for orthanc and thus able to reproduce the native streaming output to the client. Is it correct ?
With these advices we hope we will be able to make a contributing plugin (at least a first one because we won't stop there)
Best regards,
Salim