couchdb-erlang mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrey Kuprianov <andrey.koupria...@gmail.com>
Subject Re: Hi! Here is a Sample of A general purpose crypto map/reduce Erlang function for you.
Date Mon, 28 Oct 2013 13:42:28 GMT
Cool :) thanks


On Mon, Oct 28, 2013 at 6:55 PM, david martin
<david.martin@lymegreen.co.uk>wrote:

> On 28/10/13 04:18, Andrey Kuprianov wrote:
>
>> Hi all.
>>
>> Im interested in being able to do some Erlang especially when writing
>> design docs. At very least it would be nice to follow some examples and
>> pick up some basic Erlang programming skills.
>>
>> Btw (and probably everyone knows anyway), there's a great book on Erlang
>> and it's available online on http://learnyousomeerlang.com/**.
>>
>>    Cheers,
>>
>>      Andrey
>>
>>  Here is a generic piece of Erlang code I wrote some time ago. Paste into
> futon to run.
>
> %-----------------------------**------------------------------**
> -----------
> % A general purpose crypto map/reduce Erlang function pair.
> % This Function performs a crypto md5 hash sum of all the JSON keys in
> every document.
> % This enables verification of the existence of every key in every
> document or enables the
> % differing documents to be identified.
>
> fun({Doc}) ->
>         Attachments = proplists:get_value(<<"_**attachments">>, Doc),
>        %returns a proplist or the atom undefined
>
>         DocKeys = proplists:get_keys(Doc),
>        % returns list of all keys in doc
>
>         CryptoContextDocKeys=crypto:**md5_init(),
>
>         CryptoContextDocKeysFinal =
>              lists:foldr(fun(Dk,**CryptoAccum)->
>                    crypto:md5_update(CryptoAccum,**crypto:md5(Dk))
>              end, CryptoContextDocKeys,DocKeys),
>
>         CryptoNameAllKeys =
>         list_to_binary(lists:flatten(
>             [io_lib:format("~2.16.0b",[N]) || <<N>>
>             <= crypto:md5_final(**CryptoContextDocKeysFinal)])),
>
>           Emit([CryptoNameAllKeys,**DocKeys] ,2),
>
>         case Attachments of
>
>            {Propslist1}-> PropsKeysList=proplists:get_**keys(Propslist1),
>                lists:foreach(fun(K)->
> {[{<<"content_type">>,Content_**type1},{<<"revpos">>,Revpos1},
> {<<"digest">>,Mp5digest1},{<<"**length">>, Length1},{<<"stub">>,
Stub1}]}
>                   =  proplists:get_value(K, Propslist1) ,
> Emit([Content_type1,Stub1,**Length1,Mp5digest1,K,Revpos1], 1)
>               end, PropsKeysList);
>
>          undefined-> ok
>
>         end %end of Attachments case
>
> end.%end of view map function
>
> %-----------------------------**------------------------------**
> -----------
>
> fun(Keys,Values,ReReduce)->
>
> case ReReduce of
>     true->lists:sum(Values);
>     false->length(Values)
> end
> end.%end of view reduce function
> %-----------------------------**------------------------------**
> -----------
>
> sample data
> {
>    "_id": "Competition 300608.csv1",
>    "_rev": "1-**e87429f1dbea2db5cfd242b3398e32**ee",
>    "URN": "130908",
>    "LA": "806",
>    "LA NAME": "Middlesbrough",
>    "ESTAB": "6907",
>    "SCHOOL NAME": "Macmillan Academy",
>    "STREET": "PO Box 8",
>    "LOCALITY": "Stockton Road",
>    "ADDRESS 3": "",
>    " TOWN": "Middlesbrough",
>    "COUNTY": "Cleveland",
>    "POSTCODE": "TS5 4YU",
>    "TEL STD": "01642",
>    "TEL NO": "800800",
>    "HEAD TITLE": "Mr",
>    "HEAD FIRST NAME": "K U",
>    "HEAD LAST NAME": "Junior",
>    "HEAD HONOURS": "O.B.E",
>    "TYPE OF ESTABLISHMENT": "Academies",
>    "PHASE OF EDUCATION": "[Not Applicable]",
>    "STAT LOW AGE": "11",
>    "STAT HIGH AGE": "19"
> }
> %-----------------------------**------------------------------**
> -----------
>
> sample output
>       Map Value
> ["**947fad4183f054d4f6c50bd956dbb5**76", ["_rev", "URN", "COUNTY", "_id",
> "POSTCODE", "LA", " TOWN", "HEAD LAST NAME", "TYPE OF ESTABLISHMENT", "STAT
> HIGH AGE", "ESTAB", "ADDRESS 3", "TEL STD", "SCHOOL NAME", "HEAD TITLE",
> "PHASE OF EDUCATION", "LOCALITY", "TEL NO", "LA NAME", "STREET", "HEAD
> FIRST NAME", "HEAD HONOURS", "STAT LOW AGE"]]
> ID: Competition 300608.csv1
>
> Exact Reduce value
> ["**947fad4183f054d4f6c50bd956dbb5**76", ["_rev", "URN", "COUNTY", "_id",
> "POSTCODE", "LA", " TOWN", "HEAD LAST NAME", "TYPE OF ESTABLISHMENT", "STAT
> HIGH AGE", "ESTAB", "ADDRESS 3", "TEL STD", "SCHOOL NAME", "HEAD TITLE",
> "PHASE OF EDUCATION", "LOCALITY", "TEL NO", "LA NAME", "STREET", "HEAD
> FIRST NAME", "HEAD HONOURS", "STAT LOW AGE"]]
> 22518     %no. docs in database.
> %-----------------------------**------------------------------**
> -----------
>
>
> --
> David Martin
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message