Ejemplo: aplicación Go App Engine

Este ejemplo es una aplicación de App Engine, escrita en Go, que proporciona una interfaz web que usa Cloud Bigtable para realizar un seguimiento de la cantidad de visitas de tu Cuenta de Google. Se ejecuta en un contenedor de Docker local o en la nube, en el entorno flexible de App Engine. El código de esta aplicación se encuentra en el repositorio de GitHub GoogleCloudPlatform/golang-samples, en el directorio bigtable/usercounter.

Descripción general del código de muestra

Cuando se inicia el código de muestra, se crea un cliente administrativo para Cloud Bigtable. Luego, se usa el cliente para revisar la instancia de Cloud Bigtable especificada por el usuario en búsqueda de una tabla llamada user-visit-counter, con una sola familia de columnas llamada emails. Si es necesario, crea la tabla y la familia de columnas:

adminClient, err := bigtable.NewAdminClient(ctx, project, instance)
if err != nil {
	log.Fatalf("Unable to create a table admin client. %v", err)
}
tables, err := adminClient.Tables(ctx)
if err != nil {
	log.Fatalf("Unable to fetch table list. %v", err)
}
if !sliceContains(tables, tableName) {
	if err := adminClient.CreateTable(ctx, tableName); err != nil {
		log.Fatalf("Unable to create table: %v. %v", tableName, err)
	}
}
tblInfo, err := adminClient.TableInfo(ctx, tableName)
if err != nil {
	log.Fatalf("Unable to read info for table: %v. %v", tableName, err)
}
if !sliceContains(tblInfo.Families, familyName) {
	if err := adminClient.CreateColumnFamily(ctx, tableName, familyName); err != nil {
		log.Fatalf("Unable to create column family: %v. %v", familyName, err)
	}
}
adminClient.Close()

Luego, el código de muestra crea un solo cliente de Cloud Bigtable que se use para todas las lecturas y escrituras posteriores:

client, err = bigtable.NewClient(ctx, project, instance)
if err != nil {
	log.Fatalf("Unable to create data operations client. %v", err)
}

Por último, el código de muestra agrega un controlador HTTP a la raíz del servidor de App Engine. En cada solicitud, el controlador le pide al usuario que acceda a su cuenta si es necesario. Luego, ejecuta una operación Increment en la fila correspondiente a la dirección de correo electrónico del usuario a fin de seguir la visita:

tbl := client.Open(tableName)
rmw := bigtable.NewReadModifyWrite()
rmw.Increment(familyName, u.Email, 1)
row, err := tbl.ApplyReadModifyWrite(ctx, u.Email, rmw)
if err != nil {
	return &appError{err, "Error applying ReadModifyWrite to row: " + u.Email, http.StatusInternalServerError}
}

Después de aumentar la fila, el controlador muestra una página HTML en la que aparece la cantidad total de visitas del usuario actual.

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Cloud Bigtable