[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 285
  • Last Modified:

ICS, Indy9, Indy10 comparsion

Hi,

I am wondering which IP componentset to choose. I know the basic differences, but there could be more than I can think of. My main concerns are performance and reliability.

What do you Experts think?

(I know it  depends on what I need it for. Right now for a Database engine to communicate with the clients and other servers. The number of concurrent clients can be between 10 - 2000.  The DB core has a 1 core thread/CPU structure. Each core thread schedules the execution of several concurrent queries (fibers) )

Thanks, Leslie

 
 
0
Leslie7
Asked:
Leslie7
  • 7
  • 4
2 Solutions
 
MainiacfreakusCommented:
Hi Leslie

Indy 9 is resonably stable, with a few glitches here and there, but mostly ok and works very nicely.
The one glitch is that some of the servers don't like running for long periods on some of the ops (specifically setup) that i have tried. (like 98)

Indy 10 is quite stable, but not without a bug or two.  Its abilities are vastly improved over Indy 9, and some new components as well.
You shouldn't have a problem with the many connections as long as you set it up correctly.

I am afraid that I have not had experience with ICS, but Indy 10 is extremely user friendly and very well documented.
Also you have the option of purchasing priority support for Indy (which is very nice).

What version of Delphi are you using?
If you are using 2005/6 then have you considered carefully what you are doing?
I think that in 2005/6 it would be much better to use the .Net remoting built into delphi.

Mainiacfreakus
0
 
Leslie7Author Commented:
Hi,

Sorry for the very late reaction.

I am using D7 & 2005, but .Net is not an option for me at the monent.

I did some  performance comparsion between MyEngine + Indy10 and Interbase. The Engine is at least 2 times faster then Interbase when  TCP communication is not used. But Indy 10 is more then twice slower what Interbase uses for net communication.  All the effort to make a fast Engine is lost, if the TCP communication is  so slow. Any Idea what can be the difference or what to use to make it at least as fast as Interbase?  
0
 
TheRealLokiSenior DeveloperCommented:
Firstly, I've used Indy 8-10, and also ICS. My personal preference is for ICS.

To improve the performance in comparison to firebird, do the following :-
TRIM chars/varchars
  varchar(128) but only contains 10 characters. Firebird will send all 128, you should send only the length, and the 10 characters

STREAM the sending. Do not use WriteLn() or equivalent. Streaming is faster.. build a buffer of each record (for example) and send the whole record when ready. (WriteStream in Indy for example)

use a decent buffer size, e.g. 8k buffer size.
Fill the buffer if you can
e.g. if you have 10 records to send at 1k each, stick 8 in the first buffer, send it (writestream in indy for example), and send the last 2 in the next stream

This is guaranteed to be faster than firebird, if only for the simple fact about varchars

hth, Loki
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
TheRealLokiSenior DeveloperCommented:
Oh, to answer your initial question,
either set (ICS or Indy) will perform fast enough for this project. I've done performance tests with 10000+ connections on both component suites, only settling on ICS because of its' reduced server load (did not require the overhead of threads), and the fact that the author waas more active in the newsgroups when I required assistance.
0
 
Leslie7Author Commented:
Hi Loki!

It is  pleasent suprise to receive a comment for such an old Q. :)

And it is excellent timing aswell, since I have just started to explore ICS. And I am suffering from the lack of help files and documentation. Do you have links where to find good resources on ICS? Maybe examples beside the ones at Overbyte ...

Do you have any clue why is Indy10 more 2 times slower then IB6 when transfering a table of 280.000 records in a very simple test?  (The problem is surely the transfer.)

Is there anything else I should consider beside Indy and ICS?

Are all solutions built around the MS Windows socket technology?  

I am undecided yet if this should become a stand alone commercial product, or just for internal use. It is really much-much faster compered to IB6. Though have not compared to other db engines yet. If I can keep the speed when all functionalty will be implemented, it could find its share on the market. The fast and reliable LAN/WAN connection is essential ...  Linux should be targeted aswell ...  

0
 
Leslie7Author Commented:
I think you probably  have already answered the Indy10 speed Q: I should use streams. :)
0
 
Leslie7Author Commented:
Do you happened to know, what technology IB/Firebird use for LAN?
0
 
TheRealLokiSenior DeveloperCommented:
not off hand, the source for IB6 (c++ i believe) is freely available, but I have not looked at what it was using. I know it is TCP port 3050 though.
You might get a small increase in speed if you handled the socket code yourself, but it's not worth it imo, just use ics or indy, the learning curve is huge.
ICS has a newsgroup elist you can subscribe to and search
http://www.elists.org/mailman/listinfo/twsocket
The author is quite active in it, and there's a lot of knowledge there
0
 
Leslie7Author Commented:
I have got it working with ICS, and I am begining to like it more and more. In everage it is about two times faster then Indy (though I have not tried Indy with streams) .  Also ICS uses much less CPU time on the server and the client aswell.

The test results with 286.000 records:
                     
Indy10 : 11-12 mp      Avg: 11,3 mp
IB6      :  5,7 - 15 mp  Avg: 5,9 mp
ICS      : 3,2 - 6,2 mp  Avg: 5,5 mp


I do not understand why is there such a huge dispersion with IB6 nad ICS while Indy performs on the same level.

------

Indy and ICS are built around WINSOCK, which is included in windows. Is there any alternative for WINSOCK?


0
 
Leslie7Author Commented:
mp = Second :)
0
 
TheRealLokiSenior DeveloperCommented:
hmmm. not sure. It'd be above my skill to write a TCP stack without winsock.
You can speed things up further by using a protocol with less error correction, e,g, UDP or a custom layer, but then you'd no doubt want to build some error checking back into it.
UDP is a sort of "send and dont care if it gets there or not", but you could attach a sequence/crc number into the packet and only resend if it gets lost/corrupt.
If you have a reliable network you can probably do this and gain some speed, but if you're using the internet, I'd expect some problems outside of your control, and would personally stick with TCP, and I really only know how to do so with winsock
0
 
Leslie7Author Commented:
Thanks
0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

  • 7
  • 4
Tackle projects and never again get stuck behind a technical roadblock.
Join Now