Icon View Thread

The following is the text of the current message along with any replies.
Messages 21 to 30 of 40 total
Thread Speed Issue over a VPN
Mon, Mar 1 2010 8:03 AMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Robert,

How many BLOB fields are being loaded in this scheduler ?  It appears that
the issue is repeated loadings of BLOB fields, which are done on a
per-record, per-BLOB field basis.

--
Tim Young
Elevate Software
www.elevatesoft.com

Mon, Mar 1 2010 11:52 AMPermanent Link

Robert Rowlands

Tim.

There are 2 blob fields.

One stores information about recurrence of events the other stores info about which Resources the events are associated with.

I do not see why the Scheduler cannot download the lot and then do it's thing.

As noted earlier I have used the DevExMemData component that is apparently like a TClientDataSet.  I open the query for the events and then load the ExpressMemData from the query.  I then connect it to the Scheduler.  This has reduced load time for the 60 or so records to 26 seconds.  That's just for one month - I only load a month and have to reload if the user wants dates outside of this.

I was wondering about loading more data but in a different thread and am about to post a new question in regard to this.

Rob.
Mon, Mar 1 2010 12:00 PMPermanent Link

Robert Rowlands

Raul.

I've looked at you message and have made sure all machines have the same MTU (1458).

I'm unable to log in without the VPN as I'm also checking folders and loading other files as well as using the DBISAM ports.

Rob.
Tue, Mar 2 2010 6:31 AMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Robert,

<< There are 2 blob fields. >>

Hmm, then it appears as though the scheduler is not caching the BLOB fields.
The big problem with this is that DBISAM does not do so either (our other
product, ElevateDB does).

<< As noted earlier I have used the DevExMemData component that is
apparently like a TClientDataSet.  I open the query for the events and then
load the ExpressMemData from the query.  I then connect it to the Scheduler.
This has reduced load time for the 60 or so records to 26 seconds.  That's
just for one month - I only load a month and have to reload if the user
wants dates outside of this. >>

Yep, the repeated BLOB field references are probably eliminated when using
the in-memory dataset.  Another thing that you can do is enable cached
updates for the dataset before trying to connect it to the scheduler:

http://www.elevatesoft.com/manual?action=viewtopic&id=dbisam4&product=d&version=7&topic=Cached_Updates

--
Tim Young
Elevate Software
www.elevatesoft.com

Tue, Mar 2 2010 6:51 AMPermanent Link

Bruno Krayenbuhl

Robert,

> DBISAM 4.29b2 + BDS2006 <

Do you have CalcFields or OnGetText refering to the blob fields ?

If you do, every time you access a BlobField with AsString or any other similar method a request is send to the server thus generating a lot of network trafic. This is DELPHI behavior (TDataLink and TDataSet stuff in unit DB).
If the physical network is slow, then the application becomes dramatically slow.


If your query loads a limited number of records for display,I would suggest that you load it in a big gulp in a MEMORY TDBISAMTable stored in the client workstation and use that memory table data to display your information.

To do that you need :
- your TDBISamQuery say qryDevExEvents

- a TDBISAMTable say mtblDevExEvents with DataBaseName=Memory, SessionName='', TableName=MemDevExEvents (for example)
 Fields : At least all the fields returned by the query with types and names exactly matching the query fields. Plus (not sure) any field you would like your grid to display. Define Indexes as it suits your needs.
 Make sure that AutoincField (ID in your case) is defined as IntegerField in mtblDevExEvents so you do not lose its value.

Additional note : I have tried many 'in memory' tables but 'in memory' TDBISAMTable is the one I always go back to.

Now methods that will handle the gulps :


procedure TfmVPNTest.FormDestroy(Sender: TObject);
begin
 DeleteMtblDevExEvents;  // Make sure to delete the memory table
end;

procedure TfmVPNTest.DeleteMtblDevExEvents; // Clean up memory table
begin
 if mtblDevExEvents.Exists then begin
   mtblDevExEvents.Close;
   mtblDevExEvents.DeleteTable;
 end;
end;

// Stuff all the result query in the local memory table
procedure TfmVPNTest.qryDevExEventsAfterOpen(DataSet: TDataSet);
var
 lMemoryStream:TMemoryStream;
begin
 DeleteMtblDevExEvents;
 mtblDevExEvents.CreateTable;
 lMemoryStream:=nil;
 try
   lMemoryStream:=TMemoryStream.Create;
   qryDevExEvents.SaveToStream(lMemoryStream); // Sip query in MemoryStream
   qryDevExEvents.Close; // Not needed anymore.
   mtblDevExEvents.LoadFromStream(lMemoryStream); // Stuff it in local memory table
   mtblDevExEvents.Open; // TDBISAMTable (in memory) ready for use
 finally
   lMemoryStream.Free;
 end;
end;

Bruno.
Tue, Mar 2 2010 10:10 AMPermanent Link

Robert Rowlands

Thanks Bruno .

I'll check the events and test out a DBISAM memory table.

I was considering using these but assumed they are always on the Server.

How do I get them to be on the Client machine?

Rob.
Tue, Mar 2 2010 10:19 AMPermanent Link

Robert Kaplan


<Robert Rowlands> wrote in message
news:95B77720-4D31-45E1-95A3-62C6FE045F19@news.elevatesoft.com...
> Thanks Bruno .
>
> I'll check the events and test out a DBISAM memory table.
>
> I was considering using these but assumed they are always on the Server.
>
> How do I get them to be on the Client machine?

Local session.

Robert

Tue, Mar 2 2010 10:33 AMPermanent Link

Roy Lambert

NLH Associates

Team Elevate Team Elevate

Robert

>I'll check the events and test out a DBISAM memory table.
>
>I was considering using these but assumed they are always on the Server.
>
>How do I get them to be on the Client machine?

They are (even in ElevateDB - at least at the moment), and since a different session would be involved you can't do a simple query to get them across. You have to run the query client side then stream the result set across. I've never done it myself but its a question that has been answered several times on these newsgroups.

I just shoved

stream client server local

in at the new on-line search tool and got some useful stuff.

Roy Lambert [Team Elevate]
Tue, Mar 2 2010 12:10 PMPermanent Link

Tim Young [Elevate Software]

Elevate Software, Inc.

Avatar

Email timyoung@elevatesoft.com

Robert,

<< How do I get them to be on the Client machine? >>

You can use the SaveToStream/LoadFromStream methods:

http://www.elevatesoft.com/manual?action=viewtopic&id=dbisam4&product=d&version=7&topic=Loading_Saving_Streams

Something like this will do what you want:

  procedure LoadFromTable(Source: TDBISAMTable);
  var
     TempStream: TMemoryStream;
  begin
     TempStream:=TMemoryStream.Create;
     try
        Source.SaveToStream(TempStream);
        MyLocalMemoryTable.LoadFromStream(TempStream);
     finally
        TempStream.Free;
     end;
  end;

--
Tim Young
Elevate Software
www.elevatesoft.com

Tue, Mar 2 2010 12:26 PMPermanent Link

Robert Rowlands

Thanks everyone for your help.

I'll try out on a couple of the tables I need to get across.

With respect to blob caching Tim, I purchased ElevateDB v1 but it sits on my machine as I need a driver for the security component used for logging in.  I think one may be out soon.
« Previous PagePage 3 of 4Next Page »
Jump to Page:  1 2 3 4
Image