在我的网络应用程序中,我需要从gcs中逐一提取对象并处理它们。
所以问题是,
“我如何发送请求到gcs来获取下一个未处理的对象?”是否可以按照FIFO顺序处理Google Cloud Storage存储桶中的对象?
我想要做的就是简单地依靠gcs提供的排序顺序,然后逐个处理这个排序列表中的对象。 这样,我只需要跟踪我的应用程序中最后处理的项目。 我想要依靠桶中每个单独对象的timeCreated时间戳提供的排序顺序。
当我通过JSON API查询我的存储桶时,我注意到这些对象是按timeCreated从最旧到最新排序的。
例如,此查询...
返回此列表...
{
"items": [
{
"name": "cars_train/00001.jpg",
"timeCreated": "2016-03-23T19:19:47.506Z"
},
{
"name": "cars_train/00002.jpg",
"timeCreated": "2016-03-23T19:19:49.320Z"
},
{
"name": "cars_train/00003.jpg",
"timeCreated": "2016-03-23T19:19:50.228Z"
},
{
"name": "cars_train/00004.jpg",
"timeCreated": "2016-03-23T19:19:51.377Z"
},
{
"name": "cars_train/00005.jpg",
"timeCreated": "2016-03-23T19:19:51.778Z"
},
{
"name": "cars_train/00006.jpg",
"timeCreated": "2016-03-23T19:19:52.817Z"
},
{
"name": "cars_train/00007.jpg",
"timeCreated": "2016-03-23T19:19:53.868Z"
},
{
"name": "cars_train/00008.jpg",
"timeCreated": "2016-03-23T19:19:54.925Z"
},
{
"name": "cars_train/00009.jpg",
"timeCreated": "2016-03-23T19:19:58.426Z"
},
{
"name": "cars_train/00010.jpg",
"timeCreated": "2016-03-23T19:19:59.323Z"
}
]
}
这类由timeCreated顺序是正是我需要的,虽然我不如果我可以依靠这一直是真实的,那么确定吗?
所以,我可以编写我的应用程序来处理这个列表,只需搜索第一次创建的值大于最后处理的对象。
问题是这个列表可能非常大,每次用户按下NEXT按钮时,都会通过巨大的列表进行搜索,计算量过大。
我希望能够在我的查询中指定gcs来过滤列表,以便仅返回我需要的单个项目。
该API允许我设置的maxResults回到了1
值不过,我没有看到一个选项,让我只返回一个对象,其timeCreated值比我指定的值。
我想我想要做的可能是相当普遍的,所以我猜测这个问题可能存在解决方案。
解决此问题的一个方法是将已处理的对象物理移动到另一个存储桶。 这样,列表中的第一个项目总是最新的,我可以简单地发送请求maxCount = 1。
但因为它迫使我这增加了复杂性都对每一个项目,而不是1
2个独立的桶是有办法的对象名单进行过滤,只包括那些其timeCreated日期超过指定值?
在MySQL中,它可能是这样的......
SELECT name
FROM bucket
WHERE timeCreated > X
ORDER BY timeCreated
LIMIT 1