Subject | RE: [IBO] Paradox conversion |
---|---|
Author | IBO Support List |
Post date | 2014-08-08T00:43:57Z |
Rob,
If you use a TIBOTable and you have both ascending and descending indexes on
the IndexFieldNames column entries then you will be able to virtualize the
dataset and have paradox-like scrolling performance. IBO will automatically
employ what is called horizontal dataset refinement.
It is true that they lose the accurate scrollbar, but that is unavoidable. I
think they will be ok with that since it does dynamically adjust as records
are brought into the buffer. IBO simply buffers all the records they have
fetched into the dataset. I don't have a way to cycle old records out. You
simply just call InvalidateRows if you want the buffer purged to reclaim
memory without interfering with the operations of the dataset. In other
words, critical buffer entries will be preserved. For example, if you have
cached updates, those will remain.
When horizontal dataset refinement is in action then your calls to Locate()
will be very fast as well. It will not cause an auto-fetch-all type action.
It will simply move the record pointer to the middle of the dataset and you
will have a cursor to bring in more records if you scroll in either
direction. If you call the Last method it simply starts fetching records
towards BOF and doesn't have to fetch in the entire dataset.
IBO gets you as close to flat file performance as is possible so go for it
and let us know how it goes. I'll be standing by to help you if you get hung
up.
Jason
www.ibobjects.com
-----Original Message-----
From: IBObjects@yahoogroups.com [mailto:IBObjects@yahoogroups.com]
Sent: Thursday, August 7, 2014 6:08 PM
To: IBObjects@yahoogroups.com
Subject: [IBO] Paradox conversion
Hi
I am re building some extremely old software to use Firebird instead of
Paradox. The user is obsessed with performance and wants the new system
to be as good as the old system. The old system was a flat table that
copied data locally to the HDD at startup to give best performance so it
is tricky to match that sort of performance.
Anyway the issue I have is that the user wants the scrollbar to
accurately represent the position in the table. To do this AutoFetchAll
must be enabled (correct?). Enabling this means that sometimes 110,000
records need to be populated, which even with FB 2.5 on my local
machine, takes 2 and a bit seconds. I can massively improve performance
by disabling the auto fetch all, however when the user tries a
progressive search (using .locate()) the system has to fetch all the
records and it is slow for the first search.
I think I can convince the user to do away with the accurate scrollbar
if I can convince him of the benefits. I am using TIBOQuery.
My questions
1. Is there a way to run without AutoFetchAll where the data will
display quickly and then continue downloading the data without stopping
the app?
2. Setting RecordCountAccurate to False when AutoFetchAll is false
gives a a scrollbar that updates with use. Does it also improve
performance?
3. Can I increase the amount of records buffered when AutoFetchAll is
false. If so I could do a halfway house, where not all records are
buffered but more than default, so that when a progressive search starts
it is faster.
4. Any other performance suggestions. I know it is hard for a
relational db to compete with a flat file db with regards to strait grid
display?
p.s. The query is in a readOnlyTransaction and is set to readonly. The
SQL is dynamically created and set in code.
Cheers
Rob
------------------------------------
Posted by: Robert Martin <rob@...>
------------------------------------
___________________________________________________________________________
IB Objects - direct, complete, custom connectivity to Firebird or InterBase
without the need for BDE, ODBC or any other layer.
___________________________________________________________________________
http://www.ibobjects.com - your IBO community resource for Tech Info papers,
keyword-searchable FAQ, community code contributions and more !
http://tracker.ibobjects.com - your portal to submit and monitor bug reports
http://community.ibobjects.com - your portal to purchase and upgrade
------------------------------------
Yahoo Groups Links
If you use a TIBOTable and you have both ascending and descending indexes on
the IndexFieldNames column entries then you will be able to virtualize the
dataset and have paradox-like scrolling performance. IBO will automatically
employ what is called horizontal dataset refinement.
It is true that they lose the accurate scrollbar, but that is unavoidable. I
think they will be ok with that since it does dynamically adjust as records
are brought into the buffer. IBO simply buffers all the records they have
fetched into the dataset. I don't have a way to cycle old records out. You
simply just call InvalidateRows if you want the buffer purged to reclaim
memory without interfering with the operations of the dataset. In other
words, critical buffer entries will be preserved. For example, if you have
cached updates, those will remain.
When horizontal dataset refinement is in action then your calls to Locate()
will be very fast as well. It will not cause an auto-fetch-all type action.
It will simply move the record pointer to the middle of the dataset and you
will have a cursor to bring in more records if you scroll in either
direction. If you call the Last method it simply starts fetching records
towards BOF and doesn't have to fetch in the entire dataset.
IBO gets you as close to flat file performance as is possible so go for it
and let us know how it goes. I'll be standing by to help you if you get hung
up.
Jason
www.ibobjects.com
-----Original Message-----
From: IBObjects@yahoogroups.com [mailto:IBObjects@yahoogroups.com]
Sent: Thursday, August 7, 2014 6:08 PM
To: IBObjects@yahoogroups.com
Subject: [IBO] Paradox conversion
Hi
I am re building some extremely old software to use Firebird instead of
Paradox. The user is obsessed with performance and wants the new system
to be as good as the old system. The old system was a flat table that
copied data locally to the HDD at startup to give best performance so it
is tricky to match that sort of performance.
Anyway the issue I have is that the user wants the scrollbar to
accurately represent the position in the table. To do this AutoFetchAll
must be enabled (correct?). Enabling this means that sometimes 110,000
records need to be populated, which even with FB 2.5 on my local
machine, takes 2 and a bit seconds. I can massively improve performance
by disabling the auto fetch all, however when the user tries a
progressive search (using .locate()) the system has to fetch all the
records and it is slow for the first search.
I think I can convince the user to do away with the accurate scrollbar
if I can convince him of the benefits. I am using TIBOQuery.
My questions
1. Is there a way to run without AutoFetchAll where the data will
display quickly and then continue downloading the data without stopping
the app?
2. Setting RecordCountAccurate to False when AutoFetchAll is false
gives a a scrollbar that updates with use. Does it also improve
performance?
3. Can I increase the amount of records buffered when AutoFetchAll is
false. If so I could do a halfway house, where not all records are
buffered but more than default, so that when a progressive search starts
it is faster.
4. Any other performance suggestions. I know it is hard for a
relational db to compete with a flat file db with regards to strait grid
display?
p.s. The query is in a readOnlyTransaction and is set to readonly. The
SQL is dynamically created and set in code.
Cheers
Rob
------------------------------------
Posted by: Robert Martin <rob@...>
------------------------------------
___________________________________________________________________________
IB Objects - direct, complete, custom connectivity to Firebird or InterBase
without the need for BDE, ODBC or any other layer.
___________________________________________________________________________
http://www.ibobjects.com - your IBO community resource for Tech Info papers,
keyword-searchable FAQ, community code contributions and more !
http://tracker.ibobjects.com - your portal to submit and monitor bug reports
http://community.ibobjects.com - your portal to purchase and upgrade
------------------------------------
Yahoo Groups Links