找到与数据存储的相似之处
Find similarities with datastore
假设用户可以输入多个字符串,服务器对其进行处理并将其存储在数据存储区中。是否可以查询相似性的数量(没有任何解决方法)?或者对此有更好的解决方案吗?
示例查询: 获取值类似于 "a, b, c"
的 ID
Returns: 1, 8, 9, 6, 10, 等等
示例数据:
您应该修正您的数据结构,使每个 ID 和值占一行。 SQL.
中的字符串操作函数不是特别好
有了你的数据,你可以这样做:
select t.*,
((case when ',' || value || ',' like '%,a,%' then 1 else 0 end) +
(case when ',' || value || ',' like '%,b,%' then 1 else 0 end) +
(case when ',' || value || ',' like '%,c,%' then 1 else 0 end)
) as nummatches
from t
order by nummatches desc;
连接运算符因数据库而异;它可能是 +
、&
或 concat()
。
您不能在数据存储上使用 SQL 之类的查询。数据存储使用高效但非常有限的索引。
但是,您可以在同一个对象的单个索引中重复条目。
因此,如果您有像 (a,b,c,d) 这样的有限集合,那么一种方法是
按排序顺序存储所有组合:
object 1: tags = ["a", "b", "c", "ab", "bc", "abc"]
object 2: tags = ["a", "c", "d", "ac", "cd", "acd"]
您还可以搜索前缀,即索引字符串的前 N 个字母。
另一种方法是查询包含 "a" 的所有对象,然后查询包含 "b" 的所有对象等,然后在软件中进行交集。在您的示例中,这将是相当低效的。如果您只出现几次相同的值并且只请求键,那么在从数据存储请求实际对象之前进行交集会很有效。
为支持高效查询的 Datastore 设计模型可能具有挑战性,需要大量规划。如果您只处理小型数据集,您可以考虑使用 CloudSQL 解决方案。
假设用户可以输入多个字符串,服务器对其进行处理并将其存储在数据存储区中。是否可以查询相似性的数量(没有任何解决方法)?或者对此有更好的解决方案吗?
示例查询: 获取值类似于 "a, b, c"
的 IDReturns: 1, 8, 9, 6, 10, 等等
示例数据:
您应该修正您的数据结构,使每个 ID 和值占一行。 SQL.
中的字符串操作函数不是特别好有了你的数据,你可以这样做:
select t.*,
((case when ',' || value || ',' like '%,a,%' then 1 else 0 end) +
(case when ',' || value || ',' like '%,b,%' then 1 else 0 end) +
(case when ',' || value || ',' like '%,c,%' then 1 else 0 end)
) as nummatches
from t
order by nummatches desc;
连接运算符因数据库而异;它可能是 +
、&
或 concat()
。
您不能在数据存储上使用 SQL 之类的查询。数据存储使用高效但非常有限的索引。
但是,您可以在同一个对象的单个索引中重复条目。
因此,如果您有像 (a,b,c,d) 这样的有限集合,那么一种方法是 按排序顺序存储所有组合:
object 1: tags = ["a", "b", "c", "ab", "bc", "abc"]
object 2: tags = ["a", "c", "d", "ac", "cd", "acd"]
您还可以搜索前缀,即索引字符串的前 N 个字母。
另一种方法是查询包含 "a" 的所有对象,然后查询包含 "b" 的所有对象等,然后在软件中进行交集。在您的示例中,这将是相当低效的。如果您只出现几次相同的值并且只请求键,那么在从数据存储请求实际对象之前进行交集会很有效。
为支持高效查询的 Datastore 设计模型可能具有挑战性,需要大量规划。如果您只处理小型数据集,您可以考虑使用 CloudSQL 解决方案。