With all the approaches, the problem is performance of the application in part of assess to storage system and search for the word requested be the user. A good dictionary should show the close entries when a user just starts to print a work letter by letter and point to more and more precise position in the list of entries (or create such list of entries on the fly) as the user adds letters.
I have implemented such system and know that the bottleneck is the search in the storage system. To achieve required performance, the storage should better be local, presented in a binary form and
indexed by the first letters in a special way. So, the storage should contain two or more separate storage parts: one for index (loaded in the memory) and another one is a complete dictionary. Index should point to the positions in the stream for each dictionary entry.
So, my comment to the XML storage suggested by DominicZA. There is a ready-to-use standard for it, called XDXF, see
http://xdxf.sourceforge.net/[
^]. You can find number of dictionaries in this format. (Real problem is not the software. The real barrier is to obtain actual data, the dictionary itself; there are too many words :-).)
As performance is an issue, I implement it the way the original XDXF format is also accepted, but it should be re-worked to a binary format and indexed, so on second use the indexed binary version could be used. Some implementations using XDXF directly exist, by I never tried them (you may want to find out them and try). Probably my requirements to performances are too high :-), but I really enjoy answers with the delay which no one can possibly notice.
—SA