Skip to main content

Query Caching Enhancements in Open BlueDragon

I was IMing with Corey Gilmore today about his recommendations to the CFML Advisory Committee, and as I was reading through his wish list I was surprised at the number of times I could say "that's already in Open BlueDragon."


Things like being able to var scope anywhere are nice features, but one of the big ones a lot of people may not know about is something that's been around since BlueDragon 6.2.1, and that's the ability to use named caches in queries.


In the CFQUERY tag in Open BlueDragon there are a few additional attributes as compared with Adobe ColdFusion, namely BACKGROUND, which allows you to easily run a query in a background thread, and CACHENAME, which allows you to cache a query and give the cached query a name. This allows you to flush specific cached queries much more easily.


For example, the following code would cache the query under the name "myCachedQuery" until you flush it:

<cfquery name="myQuery" datasource="myDSN" cachename="myCachedQuery>
...
</cfquery>


An ACTION attribute has also been added to the CFQUERY tag so you can easily flush the cached query. To flush the "myCachedQuery" query you would run the following:

<cfquery action="flushcache" cachename="myCachedQuery">


And if you want to flush all cached queries, you can use the FLUSHALL action:

<cfquery action="flushall">


The CACHENAME attribute can also be used in combination with CACHEDWITHIN and CACHEDAFTER to create time-based cached queries that also have the advantage of being cached with a specific name.


For more information about the enhancements to CFQUERY that are available in Open BlueDragon, check out the OpenBD wiki. And thanks to Corey for prompting me to discover that while I had documented this information in the Compatibility section of the wiki, it wasn't on the page for the CFQUERY tag.


Comments



Another fanastic feature I've used with and since BD 6.2 is cacheduntilchanged or something likewise. Is that still in there in OpenBD?





Hi


Yes it is still there. For those of you do not know:


The query cache in fact stores result sets that are cached when using the CFQUERY attributes CACHEDWITHIN and CACHEDAFTER, and CACHEDUNTILCHANGE. There is a "cachecount" element that specifies the maximimum number of queries that will be stored in the cache. When the query cache becomes full, queries are removed from the cache using a least-recently used (LRU) algorithm to make room for newer queries.





Unless I'm mistaken, CACHEDUNTILCHANGE is only supported on BD .NET with SQL Server. My understanding is that is relies on specific .NET/SQL Server functionality. In the OpenBD code for CFQUERY if you use CACHEDUNTILCHANGE it throws an invalidAttributeException.


That is a GREAT feature of BD .NET though!





Matt, I think you might be incorrect, cause I'm running BD 6.2 with MySQL 4 on a W2K machine! I know, very old stuff, but why change a winning team?





@Sebastiaan-CACHEDUNTILCHANGE wasn't even introduced until BD 7, and it is only in the BD .NET version. You sure we're talking about the same thing?


The docs confirm this: "BlueDragon 7 introduces the CACHEDUNTILCHANGE attribute as a superior alternative to the CACHEDWITHIN attribute when using BlueDragon .NET in conjunction with Microsoft SQL Server 2005. ... BlueDragon for the Microsoft .NET Framework (BlueDragon .NET), when used in conjunction with SQL Server 2005 offers a better alternative to CACHEDWITHIN for query caching. The new CACHEDUNTILCHANGE attribute allows you to do 'perfect' query caching. That is, BlueDragon caches the query results until notified by the database server that the data has changed."


I suspect we must be talking about two different things here.





@Matt, seems you're right ;-) I use CACHEDWITHIN in BD 6.2 - I was planning to make use of CACHEDUNTILCHANGE, but I guess it'll only work in a version that can leverage Windows DLL's - a .NET version ;-)



Comments

Popular posts from this blog

Installing and Configuring NextPVR as a Replacement for Windows Media Center

If you follow me on Google+ you'll know I had a recent rant about Windows Media Center, which after running fine for about a year suddenly decided as of January 29 it was done downloading the program guide and by extension was therefore done recording any TV shows.

I'll spare you more ranting and simply say that none of the suggestions I got (which I appreciate!) worked, and rather than spending more time figuring out why, I decided to try something different.

NextPVR is an awesome free (as in beer, not as in freedom unfortunately ...) PVR application for Windows that with a little bit of tweaking handily replaced Windows Media Center. It can even download guide data, which is apparently something WMC no longer feels like doing.

Background I wound up going down this road in a rather circuitous way. My initial goal for the weekend project was to get Raspbmc running on one of my Raspberry Pis. The latest version of XBMC has PVR functionality so I was anxious to try that out as a …

Setting Up Django On a Raspberry Pi

This past weekend I finally got a chance to set up one of my two Raspberry Pis to use as a Django server so I thought I'd share the steps I went through both to save someone else attempting to do this some time as well as get any feedback in case there are different/better ways to do any of this.

I'm running this from my house (URL forthcoming once I get the real Django app finalized and put on the Raspberry Pi) using dyndns.org. I don't cover that aspect of things in this post but I'm happy to write that up as well if people are interested.

General Comments and Assumptions

Using latest Raspbian “wheezy” distro as of 1/19/2013 (http://www.raspberrypi.org/downloads)We’lll be using Nginx (http://nginx.org) as the web server/proxy and Gunicorn (http://gunicorn.org) as the WSGI serverI used http://www.apreche.net/complete-single-server-django-stack-tutorial/ heavily as I was creating this, so many thanks to the author of that tutorial. If you’re looking for more details on …

The Definitive Guide to CouchDB Authentication and Security

With a bold title like that I suppose I should clarify a bit. I finally got frustrated enough with all the disparate and seemingly incomplete information on this topic to want to gather everything I know about this topic into a single place, both so I have it for my own reference but also in the hopes that it will help others.Since CouchDB is just an HTTP resource and can be secured at that level along the same lines as you'd secure any HTTP resource, I should also point out that I will not be covering things like putting a proxy in front of CouchDB, using SSL with CouchDB, or anything along those lines. This post is strictly limited to how authentication and security work within CouchDB itself.CouchDB security is powerful and granular but frankly it's also a bit quirky and counterintuitive. What I'm outlining here is my understanding of all of this after taking several runs at it, reading everything I could find on the Internet (yes, the whole Internet!), and a great deal…