Saving Changes in a Standalone

Richard Gaskin ambassador at fourthworld.com
Fri Jul 2 10:33:23 EDT 2010


stephen barncard wrote:

 > Remember a stack can both be a visible window with objects and
 > a holder for scripts, it can also be a very efficient and
 > addressable data container.
 >
 > The stack one compiles as an app can call other stacks that are not
 > compiled. The best of both worlds.

Stack files are my favorite means of storage.  These days I only use 
text files for ultra-large repositories too big to be loaded into RAM 
(with an index you'd be surprised how fast Rev can get in and out of 
such things with seek).  But for almost everything else I use stacks.

With stacks you can use custom props, which are by far the most 
efficient means of using persistent arrays in Rev.  RevTalk provides the 
arrayEncode and arrayDecode functions which can be used for similar 
purposes, but the overhead of translating arrays with those functions is 
many times more costly than just opening a stack which has the data in 
custom props.

I've tested with more than 100,000 custom props on stack files up to 
100MB, and as long as you have the RAM it works great.  Smaller files 
(50MB or less) work amazingly fast in most memory configurations, even 
with similarly large numbers of props.

Since custom props can be separated into property sets, you get two 
levels of hierarchy supported with amazingly efficient access speed.

While it's possible to store arrays in props to extend that hierarchy 
further, the speed is lost as those need to go through the internal 
equivalent of arrayDecode to be accessed.

But as long as you stick with property sets and properties you get a 
robust data store that's hard to beat for efficiency.  If you need a 
deeper hierarchy you can add objects there and use those props as well. 
  That's one of the other things I like about stack files as data 
stores:  you can store either text or binary data, or even native 
objects, mixing and matching for nearly every need.

Extra bonus points:  unlike a text file, with stacks you get an 
automatic backup made during save, so if you have a power outage or 
other interruption during save at least you'll have a copy of your last 
saved file, found in the same directory with the same name preceded with 
"~".

Tip:  The engine currently doesn't prevent you from using property names 
longer than 255 chars, but as noted in the Limits section of the docs 
such names are not allowed.  If you attempt to use a longer name it will 
corrupt your stack file - see:
<http://quality.runrev.com/qacenter/show_bug.cgi?id=8840>

Just stick to the 255-char limit and you're good to go.  Short strings 
and of course numeric keys work great.

--
  Richard Gaskin
  Fourth World
  Rev training and consulting: http://www.fourthworld.com
  Webzine for Rev developers: http://www.revjournal.com
  revJournal blog: http://revjournal.com/blog.irv



More information about the use-livecode mailing list