Hi there,
I suggest the following 2 ideas to get more speed in home office:
The client cache for design elements should not(!) delete the design elements in the cache, when the database (DB) gets closed, other wise they need to get loaded again whenever the DB gets opened again. But if they still exist in the cache, they load very fast (local) and the traffic for the server gets slightly reduced. Only the signatures of the design elements need to be compared with those on the server, so that updates can take place.
Allow to prefetch documents in Lotusscript, Java and Javascript.
Example:
Assume an average latency of 40ms (Notes -> Server and Server -> Notes)
I also assume that he server is able to retrieve a document in 1ms
Sub NormalLoop(view As NotesView)
Dim doc As NotesDocument
Set doc=view.Getfirstdocument 'total time 2*40+1=81ms
Do Until doc Is Nothing
'whatever needs to be done 'A little bit: 1ms, heavy stuff: 80ms
Set doc=view.Getnextdocument(doc) 'total time 81ms
Loop
'a single loop run would take it his exmaple an average of 161 or 242 ms
End Sub
|
Sub FastLoop(view As NotesView)
Dim doc As NotesDocument
Dim cached as boolean
cached=true
Set doc=view.Getfirstdocument 'total time 2*40+1=81ms
Do Until doc Is Nothing
Call view.GetNextDocument(doc,cached) 'total time 1ms, prefetch !!!
'whatever needs to be done 'A little bit: 5ms, heavy stuff: 80ms
Set doc=view.Getnextdocument(doc) 'retrieves from local cache:1ms
Loop
'a single loop run would take it his exmaple an average of 81 or 82 ms
End Sub
|
The command " Call view.GetNextDocument(doc,cached)" would be implemented so that it would send the request to the server, but would not wait for the result delivery. LS could continue, it would not wait for the document. When the server delivers the document to the cleint, it would be stored in the cache(client background job), so that the next "Set doc=view.Getnextdocument(doc)" would be solved by the local cache, if the document has already arrived. Otherwise it has to wait for reception, but still less than the total latency time !!.
So for a loop with heavy workload, that would significantly accelerate the loop. For a simple change of 1 string field, there will be not a lot benefit though.
Collections could even internally handle the pre-fetch, if allowed to.
Locking could be processed accordingly.
Jochen "Joe" Herrmann
Multiple users working in local replicas open the door to quite a lot of replication conflict issues. We are seeing this daily, with just groups of 5 to 10 users.
Maybe we ought to create a cluster with each user running a Domino serever on his PC...
Well, thats what I do indeed to develope in the home office.
But in our company and other companies there are lots of databases which reside on the servers and where lots of people have access to. If they would use local replicas, we would have to handle all the replication conflicts. And I'm quiet sure that i.e. the transaction key methods are not able to produce unique numbers. A lots of databases were build in a time where replication and home office was not really important. Thats has chanfged now dramatically.
Jochen "Joe" Herrmann
Why not simply create a local replica and eliminate all latency completely?