One of the cooler technologies that I have playing with lately is CouchDB.
"Apache CouchDB is a document-oriented database that can be queried and indexed in a MapReduce fashion using JavaScript. CouchDB also offers incremental replication with bi-directional conflict detection and resolution" (http://couchdb.apache.org/).
Alex Robson recently
announced a set of libraries that, among other things, makes talking with CouchDB from a .NET language very easy. Here's an F# example (the complete source can be found at
http://github.com/dmohl/Symbiote--Relax--Example):
module Progam
open System
open Symbiote.Core
open Symbiote.Relax
open Symbiote.Daemon
type PersonCouchDocument =
val id : string
val mutable name : string
val mutable address : string
inherit DefaultCouchDocument
new (id, name, address) =
{id = id; name = name; address = address} then base.DocumentId <- id
member x.Name
with get () = x.name
member x.Address
with get () = x.address
type DemoService =
val couchServer : ICouchServer
new(couchServer) = {couchServer = couchServer}
interface IDaemon with
member x.Start () =
do Console.WriteLine("The service has started")
let document = new PersonCouchDocument("123456", "John Doe", "123 Main")
x.couchServer.Repository.Save(document)
let documentRetrieved =
x.couchServer.Repository.Get<PersonCouchDocument>(document.DocumentId);
do Console.WriteLine(
"The document with name {0} and address {1} was retrieved successfully",
documentRetrieved.Name, documentRetrieved.Address)
do x.couchServer.DeleteDatabase<PersonCouchDocument>()
member x.Stop () =
do Console.WriteLine("The service has stopped")
do Assimilate
.Core()
.Daemon(fun x -> (x.Name("FSharpDemoService")
.DisplayName("An FSharp Demo Service")
.Description("An FSharp Demo Service")
.Arguments([||]) |> ignore))
.Relax(fun x -> x.Server("localhost") |> ignore)
.RunDaemon()
As you can see, interacting with CouchDB via F# and Symbiote is a snap. Symbiote has a large number of additional features and advantages. To learn more about it, go to
http://sharplearningcurve.com/wiki/Symbiote-Main.ashx.
No comments:
Post a Comment