Phillip Powers - 446 - May 7, 2014

I’ve created a Redis-backed “filesystem” (complete with fine-grained inherited access control, symlinks, etc) called “PocoFS” that uses POCO objects as its “files” (basically a hierarchical database of POCO objects), and am trying to gauge if there’s any interest in implementing a ServiceStack virtual FS in front of it.

For example, I could see this being useful for cases where you want to have the content of your SS site located separately in a centralized Redis database, for load-balancing purposes, etc - you could have multiple SS instances using the same Redis FS and not worry about synchronizing the content across these instances.

I’ve attached a picture of a simple web frontend that I’ve made for it to hopefully make it more clear what I’m talking about. The tree view is displaying the contents of the Redis database, where each node is a POCO object that’s been serialized into it.

Currently, I’m using this as my general-purpose data store and think it could have applications elsewhere. Let me know if you think something like this could be useful to you - or not- as I don’t want to spend time implementing it if there’s really no need for it.

Thanks.

Fredrick Lackey:

Possibly interested … would need to know more about the storage itself first.  For example, are files persisted or maintained in RAM?

Phillip Powers:

It’s using Redis, so it’s a persistent in-memory database. That means that all of the content is served from memory, but persisted to disk (in Redis AOF/ RDB form) in case of power outages, etc.

Fredrick Lackey:

I’d be interested if there was a way to control what is persisted to memory… a blob versus a reference (with storage actually being on disk).

I recommend posting RFC’s on the public ServiceStack G+ group for maximum feedback:
https://plus.google.com/u/0/communities/112445368900682590445

A RedisFS VirtualPathProvider might be interesting where you can serve your website assets from a distributed redis cache. Also not sure if you’re aware SS includes an InMemoryVirtualPathProvider although that’s mainly used for unit testing.