2016-05-05 69 views
13

TL; DR: Qualcuno ha creato un servizio con golang + protobuf + SQL? Se hai usato un ORM (o una libreria tipo ORM), quale?Quale ORM usi per i servizi golang che usano protobuf per serializzare i dati?

Continua a leggere per più contesto:

Sto costruendo un servizio in golang che protobuf utilizza per serializzare i dati. Quindi tutti i miei tipi e le chiamate API sono definiti nei file .proto e quindi il codice Go viene generato con protoc.

Mi piacerebbe utilizzare un ORM per mantenere i dati in MySQL. Ho cercato su google e ho trovato gorm, gorp e un sacco di altre librerie. Sembra che avere una sorta di tag o annotazione all'interno della struttura sia un modello comune con queste librerie.

Esempio dalla documentazione Gorp:

type Post struct { 
    // db tag lets you specify the column name if it differs from the struct field 
    Id  int64 `db:"post_id"` 
    Created int64 
    Title string `db:",size:50"`    // Column size set to 50 
    Body string `db:"article_body,size:1024"` // Set both column name and size 
} 

Dalla documentazione Gorm:

type Profile struct { 
    gorm.Model 
    Name string 
} 

type User struct { 
    gorm.Model 
    Profile  Profile `gorm:"ForeignKey:ProfileRefer"` // use ProfileRefer as foreign key 
    ProfileRefer int 
} 

Così ho provato a vedere se c'è un modo per aggiungere queste annotazioni ai messaggi nei miei file Proto, e trovato this github issue dicendo che questo non sarà supportato.

Quindi vengo a Stack Overflow per un consiglio. Sicuramente c'è qualcuno là fuori che usa protobufs in golang con SQL, giusto? E usando un ORM? Quindi quale stai usando?

+1

ti suggerisco sarà meglio nel lungo periodo se si tiene il protocollo di rete e il modello di database separato. Uso parsimonia (fondamentalmente la stessa cosa di protobuf) e SQL per l'archiviazione in uno dei miei progetti. Tenendoli separati, posso scrivere il mio protocollo di risparmio nel modo in cui sarebbe vantaggioso per le comunicazioni di rete e mantenere il mio database nel modo in cui è vantaggioso archiviare e accedere effettivamente ai dati. Potrei cambiarne uno senza toccare l'altro. Potrebbe sembrare un lavoro in più, ma preverrà problemi seri in futuro. – creker

+0

Quindi ho considerato di avere un set separato di strutture per l'utilizzo all'interno del servizio e quindi di utilizzare qualsiasi OL 'ORM per mantenere gli oggetti nel mio back-end SQL. Ma dovrei mantenere due gruppi separati di oggetti e tenerli sincronizzati. Preferirei non farlo. Logicamente, gli stessi oggetti presenti nei miei messaggi protobuf sono gli oggetti che voglio manipolare in tutto il servizio e archiviarli nel database. –

+0

Vorrei suggerire parsimonia ... –

risposta