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 …

Running a Django Application on Windows Server 2012 with IIS

This is a first for me since under normal circumstances we run all our Django applications on Linux with Nginx, but we're in the process of developing an application for another department and due to the requirements around this project, we'll be handing the code off to them to deploy. They don't have any experience with Linux or web servers other than IIS, so I recently took up the challenge of figuring out how to run Django applications on Windows Server 2012 with IIS.

Based on the dated or complete lack of information around this I'm assuming it's not something that's very common in the wild, so I thought I'd share what I came up with in case others need to do this.


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Assumptions and CaveatsThe operating system is Windows Server 2012 R2, 64-bit. If another variant of the operating system is being used, these instructions may not work properly.All of the soft…

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 …