Tytuł w dużym stopniu wyjaśnia mój problem. Jeśli nie jest to możliwe, jak mogę napisać własne identyfikatory? W szczególności, w jaki sposób wygenerować ciąg identyfikatora, o którym wiem, że nie jest obecnie pobierany przez Couch, mogę sam dodać ciąg i zapisać go.

1
mattacular 11 luty 2012, 19:19

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć programu obsługi aktualizacji, aby połączyć wybrany prefiks z automatycznie wygenerowanym UUID. Program obsługi aktualizacji w zasadzie przechwytuje żądanie HTTP, dokonuje dodatkowej transformacji i zwraca nowy dokument. (oraz wiadomość do wysłania w odpowiedzi do użytkownika)

W programie obsługi aktualizacji obiekt req otrzymuje również identyfikator UUID, który CouchDB przypisałby do dokumentu. Jeśli nie ma istniejącego dokumentu dla bieżącego wniosku, możesz utworzyć nowy całkowicie od podstaw.

function (doc, req) {
    // if no document exists
    if (!doc) {
        // create a new one
        doc = {
            // req.id is the generated UUID for this request
            _id: "article_" + req.id
        }; 
    }

    // always return an array 1) the new doc and 2) the string response message
    return [ doc, "New Article Created" ];
}

Przykład tutaj jest naprawdę trywialny, a bardziej kompletne przykłady są podane na tej stronie wiki, do której linkuję. Chciałem tylko pokazać ci tylko to, czego potrzebujesz do swojego pytania. Programy obsługi aktualizacji to bardzo wydajny sposób na zaimplementowanie logiki aplikacji w warstwie bazy danych.

3
Dominic Barnes 11 luty 2012, 20:46

Wolę odpowiedź Dominika, ale dla kompletności możesz również wstępnie załadować kilka UUID z CouchDB i połączyć je samodzielnie. Aby otrzymać partię pięciu:

$ curl -i example.iriscouch.com/_uuids?count=5
HTTP/1.1 200 OK
Server: CouchDB/1.2.0 (Erlang OTP/R15B)
Pragma: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
ETag: "86908CQ9GCBC01P6VF18YM2P4"
Date: Sun, 12 Feb 2012 02:03:23 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 187
Cache-Control: must-revalidate, no-cache
Connection: keep-alive

{"uuids":["da769daee5996412c8f598155c002885","da769daee5996412c8f598155c0034b4","da769daee5996412c8f598155c00406f","da769daee5996412c8f598155c004c18","da769daee5996412c8f598155c00501a"]}

Teraz możesz tworzyć własne identyfikatory. Masz jeszcze więcej pracy przed sobą, aby napisać i utrzymać kod, który to wszystko zrobi. Ale zaletą jest to, że nie potrzebujesz funkcji aktualizacji, wykonującej funkcję Javascript (i potencjalnie wywołującej proces Javascript na serwerze) dla każdej aktualizacji dokumentu.

Osobiście zacząłbym od techniki Dominique'a i przesunąłbym się do mojej tylko wtedy, gdy napotkasz problemy z wydajnością.

2
JasonSmith 12 luty 2012, 06:35