For the past three weeks I have been seeking the optimal way to import the business data in our Progress database into SQL Server database for reporting. The routine(s) are to be run daily.
There seems to be an absence of expert knowledge providing deep coverage in this area of integration. Based upon my testing, benchmarking, and a brief communication from our vendor here is what I have found:
The Progress broker for the SQL-92 connection serves the same purpose as the Oracle listener. However, the granularity with which the Progress broker listens is at the client level rather than the request level. This is significant from the perspective that multi-threaded clients will exist. The web browser is an example of a multi-threaded client that may open multiple windows, making requests from each window, in parallel. The SQL Server includes a job runner that can run multiple jobs concurrently. I believe that Unix's CRON does the same thing. Concurrent jobs could be requests for data from the Progress database. Unfortunately, Progress will see the concurrent requests as all being from the same client and will not spawn a new server to handle the request. This means that concurrent requests from a single client to the Progress SQL service will be processed serially in the order received. This limitation does not exist with databases like Oracle, SQL Server, DB2, etc.
My other noteworthy finding is that the shortest elapsed time for retrieving large sets of rows from Progress is to breakup the retreival into small groups and put them back together on the destination database. Furthermore, asking the Progress database to provide any additional functionality - casting, min/max functions, and joins - results in much greater processing time, and the best elapsed times will be achieved by simply getting the raw facts from the Progress database and manipulating the results in the destination database.
There seems to be an absence of expert knowledge providing deep coverage in this area of integration. Based upon my testing, benchmarking, and a brief communication from our vendor here is what I have found:
The Progress broker for the SQL-92 connection serves the same purpose as the Oracle listener. However, the granularity with which the Progress broker listens is at the client level rather than the request level. This is significant from the perspective that multi-threaded clients will exist. The web browser is an example of a multi-threaded client that may open multiple windows, making requests from each window, in parallel. The SQL Server includes a job runner that can run multiple jobs concurrently. I believe that Unix's CRON does the same thing. Concurrent jobs could be requests for data from the Progress database. Unfortunately, Progress will see the concurrent requests as all being from the same client and will not spawn a new server to handle the request. This means that concurrent requests from a single client to the Progress SQL service will be processed serially in the order received. This limitation does not exist with databases like Oracle, SQL Server, DB2, etc.
My other noteworthy finding is that the shortest elapsed time for retrieving large sets of rows from Progress is to breakup the retreival into small groups and put them back together on the destination database. Furthermore, asking the Progress database to provide any additional functionality - casting, min/max functions, and joins - results in much greater processing time, and the best elapsed times will be achieved by simply getting the raw facts from the Progress database and manipulating the results in the destination database.