Domanda

Ho due domande qui:

Domanda 1:

- può parsimonia fornire una funzionalità interna di classe? (Vedi il mio esempio successivo)

-? Se può, la parsimonia può utilizzare tale funzionalità facilmente

Questa è l'interfaccia scriba (scrivano / se / scribe.thrift). Ma il suo campo del messaggio non può che essere stringa, che io non credo abbastanza flessibile.

#!/usr/local/bin/thrift --cpp --php

##  Copyright (c) 2007-2008 Facebook
...
...
## See accompanying file LICENSE or visit the Scribe site at:
## http://developers.facebook.com/scribe/

include "fb303/if/fb303.thrift"

namespace cpp scribe.thrift

enum ResultCode
{
  OK,
  TRY_LATER
}

struct LogEntry
{
  1:  string category,
  2:  string message
}

service scribe extends fb303.FacebookService
{
  ResultCode Log(1: list<LogEntry> messages);
}

Sarebbe bello se posso fare la seguente cosa (io non so nemmeno se la parsimonia stesso fornisce la funzionalità interna di classe in base al suo buffer document-- ma sicuramente può protocollo).

enum ResultCode
{
  OK,
  TRY_LATER
}

struct MyLogStructure {
  1: string field_name;
  2: string value;
}

struct LogEntry
{
  1:  string category,
  2:  MyLogStructure message
}

service scribe extends fb303.FacebookService
{
  ResultCode Log(1: list<LogEntry> messages);
}

Domanda 2:

- Può scrivano di buffer protocollo uso come la rappresentazione di dati interni facilmente? (Senza troppa modifica del codice)

-? Se la risposta alla domanda di cui sopra è "no", ha fatto Google open-source la sua attuazione sribe

Nessuna soluzione corretta

Altri suggerimenti

Sì, le strutture Thrift possono includere altri le strutture, e la sua definizione (ripetuto in seguito) potrebbe funzionare:

enum ResultCode { OK, TRY_LATER }

struct MyLogStructure {
  1: string field_name;
  2: string value;
}

struct LogEntry {
  1: string category,
  2: MyLogStructure message 
}

service scribe extends fb303.FacebookService {
  ResultCode Log(1: list messages);
}

Se ridefinito le interfacce di Scribe in questo modo, si sarebbe probabilmente necessario modificare il codice di Scribe per gestire il vostro nuovo tipo a seconda di ciò che fa internamente con string message.

Naturalmente, si può sempre serializzare l'oggetto MyLogStructure ad una stringa ed evitare questo problema del tutto.

No, non mi immagino Scribe sarebbe in grado di utilizzare il protocollo buffer come la sua rappresentazione interna dei dati con facilità. Tutto il codice RPC è stato generato da queste definizioni, e si potrebbe ridefinire il metodo Log di prendere un oggetto arbitrario (renderlo, per esempio, un oggetto buffer protocollo), ma questo sarebbe altrettanto difficile come sopra.

A mia conoscenza di Google non è open-source qualsiasi sistema di registrazione distribuito. Chukwa da Yahoo / Hadoop è un'alternativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top