我知道Firebase事务会根据旧值和新值启用某些值的原子更新
但考虑到Firebase是一个实时数据库,我认为,必须谨慎使用交易而不是"实时功能"
这是一个例子:
我理解,如果您对某个值执行某些数学运算(添加"喜欢"或等效值),则使用事务是有意义的
我不明白在以下用例中使用事务是否有意义:假设文本字段可以由任意数量的用户更新,并且我们对所有更新感兴趣,因为它们实时发生.firebase建议我们在这种情况下使用交易吗?或者是值上发生的最终"持久操作",仅限于Firebase服务器时钟的每个时间戳粒度的单个"持久操作"?
还能保证事件将按照最终值的持续顺序传递吗?
我的目标是在本地运行Tensorflow培训应用程序时使用存储在Google云端存储上的培训数据(格式:tfrecords).(为什么在本地?:我在测试之前将其转换为Cloud ML的培训包)
基于这个线程我不应该做任何事情,因为底层的Tensorflow API应该能够读取gs://(url)
然而事实并非如此,我看到的错误是格式:
2017-06-06 15:38:55.589068:I tensorflow/core/platform/cloud/retrying_utils.cc:77]操作失败,将在1.38118秒内自动重试(尝试10分之一),原因是:不可用:执行HTTP请求时出错(HTTP响应代码0,错误代码6,错误消息'无法解析主机'元数据'')
2017-06-06 15:38:56.976396:I tensorflow/core/platform/cloud/retrying_utils.cc:77]操作失败,将在1.94469秒(尝试2个满10个)中自动重试,原因是:不可用:执行HTTP请求时出错(HTTP响应代码0,错误代码6,错误消息'无法解析主机'元数据'')
2017-06-06 15:38:58.925964:I tensorflow/core/platform/cloud/retrying_utils.cc:77]操作失败,将在2.76491秒(尝试3中的10)中自动重试,原因是:不可用:执行HTTP请求时出错(HTTP响应代码0,错误代码6,错误消息'无法解析主机'元数据'')
我无法跟踪我必须开始调试此错误的位置.
这是一个重现问题的片段,还显示了我正在使用的tensorflow API.
def _preprocess_features(features):
"""Function that returns preprocessed images"""
def _parse_single_example_from_tfrecord(value):
features = (
tf.parse_single_example(value,
features={'image_raw': tf.FixedLenFeature([], tf.string),
'label': tf.FixedLenFeature([model_config.LABEL_SIZE], tf.int64)
})
)
return features
def _read_and_decode_tfrecords(filename_queue):
reader = tf.TFRecordReader()
# Point it at the filename_queue
_, value = reader.read(filename_queue)
features = _parse_single_example_from_tfrecord(value)
# decode the binary string image data
image, label = _preprocess_features(features)
return image, label
def test_tfread(filelist):
train_filename_queue = (
tf.train.string_input_producer(filelist, …Run Code Online (Sandbox Code Playgroud) 我们在Tensorflow上运行多GPU作业,并评估从基于队列的模型(使用string_input_producer接口)到新的Tensorflow Dataset API的迁移.后者似乎提供了一种更容易的方式来同时切换列车和验证.
下面的代码片段显示了我们如何做到这一点.
train_dataset, train_iterator = get_dataset(train_files, batch_size, epochs)
val_dataset, val_iterator = get_dataset(val_files, batch_size, epochs)
is_validating = tf.placeholder(dtype=bool, shape=())
next_batch = tf.cond(is_validating,
lambda: val_iterator.get_next(),
lambda: train_iterator.get_next())
validation_tower = self.num_gpus - 1
tower_grads = []
for i in range(self.num_gpus):
with tf.variable_scope(tf.get_variable_scope(),reuse=(i > 0)):
with tf.device('/gpu:%d' % i), tf.name_scope('%s_%d' % ('gpu_', i)) as scope:
if i == validation_tower:
images, labels = next_batch
# Loss funcs snipped out
else:
images, labels = next_batch
# Loss funcs snipped out
Run Code Online (Sandbox Code Playgroud)
get_dataset函数构建数据集,设置映射函数和批处理大小.它还构建了一个迭代器,但没有初始化它.迭代器的初始化发生在会话开始之前.
会话运行时提供is_validating布尔值,我们通过feed_dict传递的每个步骤is_validating为True,以使用验证数据集
我的问题是:
假设我有8个gpus,所以我们对7个GPU进行了培训.对于这7个GPU中的每一个,Iterator是否从同一点前进,从而为所有7个GPU提供相同的数据?
作为测试人员的工作,我的一个顾虑是始终确保完整的测试覆盖率.这可能会变得困难,因为有时可能的组合数量确实很多.让我们举一个例子.一个很好的制作茶的例子
要泡茶,你可以使用红茶,绿茶或白茶.(3个变量)
你可以使用牛奶或水(2个变量)
你可以使用糖或蜂蜜或没有(3个变量)
你可以让它冰或热(2个变量)
正如你所看到的,现在如果我想测试所有可能的制茶方法(假设有一个允许创造各种茶的假设软件),那么我必须测试:3x2x3x2组合= 36,因为确实36种独特的制茶方式
在这种情况下哪种算法最好.我可以看到嵌套的for循环是最好的.我对吗?
在Firebase中,如果我想创建一个具有唯一ID的子节点,我会看到两个选项:
推() :
使用push()方法将数据附加到多用户应用程序中的列表.每次将新子项添加到指定的Firebase引用时,push()方法都会生成唯一ID.通过为列表中的每个新元素使用这些自动生成的密钥,多个客户端可以同时将子项添加到同一位置而不会发生写入冲突.push()生成的唯一ID基于时间戳,因此列表项按时间顺序自动排序.
childByAutoId:
childByAutoId使用唯一键生成新的子位置,并向其返回FIRDatabaseReference.当Firebase数据库位置的子项代表项目列表时,这非常有用.childByAutoId:生成的唯一密钥以客户端生成的时间戳为前缀,以便生成的列表按时间顺序排序.
有什么不同?
我正在使用Echo在Golang中构建一个极简服务器。
在其中,Echo可以在内部将传入的JSON请求有效负载绑定到结构并访问有效负载。
但是我有一个场景,我只知道传入的JSON请求有效负载的3个字段,并且在这种情况下绑定不起作用。
我仍如何访问我关心的3个字段?如果我无法在Echo中做到这一点,您能推荐我一个与Echo的上下文结构兼容的JSON解码器吗?
我想知道我是否可以通过电子邮件"查找"用户,而不是以用户身份登录
我想这样做的原因是,只是确定我是否已经是系统的用户,仅使用电子邮件地址
我查看了这个较旧的帖子,但它似乎是以前版本的Firebase
是否有可能做到这一点在目前的火力地堡,或者我的替代方法是保持这些信息的提供(和向所有人开放?),以找出是否一个给定的电子邮件是我的系统的一部分?
我想就大量 Google IOT 核心设备中的任何一个缺少心跳(或收到 0 个字节)发出警报。我似乎无法在 Stackdriver 中做到这一点。相反,它似乎让我在整个设备注册表上发出警报,这并没有给我我正在寻找的东西(我怎么知道某个特定设备已断开连接?)
那么如何去做呢?
我注意到要使用Firebase存储(Google云端存储),我需要提供一个唯一的文件名来上传文件.
然后,我计划在Firebase实时数据库中保留该存储文件位置(https URL或gs URL)的副本,客户端将能够单独读取和下载它
但是,我无法为Firebase存储上的文件提供唯一的文件名.由于多个客户端正在将图像上载到单个Firebase根目录,因此使用UUID生成器可能会导致我的情况发生冲突
这是我的计划.我想知道它是否有用
让我们调用我的firebase root:聊天室,它由键组成:chatroom_1,chatroom_2 ... chatroom_n
在chatroom_k下我有一个名为"Content"的根,它存储由Firebase唯一生成的Push键来存储内容.每个推送键代表一个内容,但实际内容存储在Firebase存储中,一个名为URL的密钥引用实际内容的URL.只要存储桶层次结构代表chatroom_k,Firebase存储上此内容的文件名是否可以具有相同的随机Push键?
firebase ×4
tensorflow ×2
algorithm ×1
combinations ×1
for-loop ×1
go ×1
go-echo ×1
stackdriver ×1