不确定这是否是问题的最佳标题......也许有人可以为我重命名?
我的问题是关于在Redis的c#ServiceStack包装器中读取和组合数据的性能以及调用如何在内部工作。
我将解释两个有希望在最终结果中产生的情景。一种情况是附加到事务的类别ID列表,以便可以独立存储类别。
问题:我的最终目标是检索所有包含“食物”类别的交易。
我试图将清晰度有助于我理解的其他要点编号。考虑有10,000个交易,每个交易平均有3个类别。
注意: ServiceStack.Net Redis: Storing Related Objects vs. Related Object Ids有一个相关的问题,但没有解释效率。
示例A
public class Transaction
{
public List<string> CategoryIds;
}
示例B
public class Transaction
{
public List<string> CategoryNames;
}
代码
var transactionClient = redisClient.GetTypedClient<Transaction>();
//1. is this inefficient returning all transactions?
// is there any filtering available at this part?
var allTransactions = transactionClient.GetAll();
//2. In the case of Example A where the categories are stored as id's
// how would I map the categories to a transaction?
// maybe I have a List that has a container with the Transaction associated with a
// list of Categories, however this seems inefficient as I would have to loop
// through all transactions make a call to get their Categories and then
// populate the container datatype.
//3. If we are taking Example B how can I efficiently just retrieve the transactions
// where they have a category of food.
答案 0 :(得分:0)
效率减少网络电话与更多数据。 Redis中的数据刚刚变成blobbed,大多数时候单个API调用使用redis服务器操作以1:1映射。这意味着您只需从远程服务器的内存中下载json数据集blob并在客户端上对其进行反序列化即可考虑性能影响 - 实际上就是这种情况。
在某些API中,例如GetAll(),它需要2次调用,1次用于获取实体集中的所有ID,另一种用于获取具有这些ID的所有记录。 Redis Client的源代码非常平易近人,因此我建议您仔细查看发生了什么。
因为您只有3个类别,所以通过尝试在服务器上进行过滤,您节省的额外数据并不多。
所以你的选择基本上是: