我在Steam上玩Team Fortress 2时注意到的成就的复杂性是惊人的.
有没有资源描述他们如何构建他们的成就引擎?有许多数据必须同时并实时处理,以检测成就标准的匹配.我觉得它不会使用熟悉的概念,例如"复杂事件处理".
architecture achievements game-engine complex-event-processing
说我有一个用户集合.每个用户都有User_ID,用户名和Tenant_ID.
有时我需要所有用户使用特定的Tenant_ID.
有时我需要一个基于User_ID的特定用户".
有时我需要一个基于用户名的用户.
我总是可以使用Tenant_ID作为查找的一部分.
为此数据实现缓存层的理想方法是什么?
自从我处理多租户系统以来,我应该考虑哪些因素?
管理所有可能的缓存密钥的最佳方法是什么?
选项#1:将所有用户存储在"Tenant_1_Users"的单个密钥下
这个问题是我将通过网络传输大量不需要的数据.如果我只需要找到一个特定的用户,那么我需要在检索整个集合后使用LINQ或其他东西在代码中进行查找.
选项#2:在"TenantID_1_UserID_5"和"TenantID_1_Username_Jason"等不同键下复制相同的User对象.
这里的问题是管理用户对象的所有各种键和位置.特别是如果我需要刷新特定用户,因为它已在数据库中更新.我现在需要知道它可以存储的所有可能的地方.也使用更多内存,因为相同的用户可以在不同的键下.
相关:AppFabric Cache'Design' - 缓存单个项目或集合?
问题是Azure AppFabric缓存不支持区域,标记或通知.
Dapper 的最新版本现在包括调用的查询函数QuerySingle,QueryFirst但这些函数似乎不支持提供 aSplitOn和 Map 值。
为什么这似乎不可用,是否存在一些基本问题?是我唯一的选择QueryAsync().FirstOrDefault()吗?
如何正确确保用户不会篡改查询字符串值或操作URL值?例如,您可能在CommentController上有一个Delete Comment操作,它采用CommentID.操作URL可能看起来像/ Comments/Delete/3以删除ID为3的注释.
现在显然你不希望任何人能够删除评论3.通常在评论的所有者或管理员有权这样做.我看到这种安全性强制执行不同的方式,并想知道你们中的一些人是如何做到的.
您是否进行多个数据库调用以检索注释并检查注释的作者是否与调用删除操作的用户匹配?
您是否将CommentID和UserID向下传递给执行删除的存储过程并执行删除操作,其中UserID和CommentID等于传入的值?
加密查询字符串值是否更好?
我需要用一些重试策略逻辑包装一些Linq查询.
传递这个是安全的:
return WithRetry<User>(() =>
dataContext.Users.Where(u => u.UserID == userID).SingleOrDefault());
Run Code Online (Sandbox Code Playgroud)
对此:
public TResult WithRetry<TResult>(Func<TResult> methodCall)
{
// My Try/Catch Retry Code
}
Run Code Online (Sandbox Code Playgroud)
或者第一行应该像这样构造:
return WithRetry<User>(() =>
{
return dataContext.Users
.Where(u => u.UserID == userID)
.SingleOrDefault();
});
Run Code Online (Sandbox Code Playgroud) 我正在尝试生成一个查询,查找成本大于3的所有大型红色东西.
这个查询似乎就是我所追求的:
{ "color" : "red", "size" : "large", "cost" : { "$gt" : 3.0 } }
Run Code Online (Sandbox Code Playgroud)
但是,我无法找到使用官方MongoDB CSharp驱动程序创建成本条件的优雅方法.这是一个似乎创建查询的hack:
QueryConditionList gt = Query.GT("cost", BsonDouble.Create(3));
QueryDocument query = new QueryDocument();
query.Add("color", "red");
query.Add("size", "large");
query.Add(gt.ToBsonDocument().Elements);
List<BsonDocument> results = events.Find(query).ToList();
Run Code Online (Sandbox Code Playgroud)
另一种似乎有效的方法是这样的:
QueryDocument query = new QueryDocument();
query.Add("color", "red");
query.Add("size", "large");
query.Add("cost", new BsonDocument("$gt", BsonDouble.Create(3)));
List<BsonDocument> results = events.Find(query).ToList();
Run Code Online (Sandbox Code Playgroud)
这些方法中的任何一种都是实现这一目标的好方法吗?还有另一个吗?
我需要使用允许我动态构建查询并添加将在查询中涉及的字段的技术.我希望找到一种通过query.Add()添加条件的方法,但我不知道这是否可行.
任何帮助表示赞赏.
在尝试优化使用MERGE的存储过程时,我偶然发现了这篇文章.我应该如何解释大胆的陈述,说不包括与常数的比较?
http://technet.microsoft.com/en-us/library/cc879317(v=sql.105).aspx
仅在ON子句中指定搜索条件,以确定在源表和目标表中匹配数据的条件.也就是说,仅指定目标表中与源表的相应列进行比较的列.不要包括与其他值(如常量)的比较.
这是否意味着我应该避免使用看起来像这样的ON语句?
ON [Source].[CategoryId] = [Target].[CategoryId] AND [Source].[Color] = @Color
Run Code Online (Sandbox Code Playgroud)
这个建议是仅适用于MERGE还是适用于所有类型的JOIN?
我有一些JavaScript,可以在页面上创建某种小部件。我将把这个片段提供给客户,所以我希望他们做的很少。
我现在工作的最明显的解决方案是这样的:
<div id="divContent"></div>
<script type="text/javascript">
MakeWidget('divContent');
</script>
Run Code Online (Sandbox Code Playgroud)
使小部件基本上查找divContent div并用小部件的html填充它。
有一个更好的方法吗?您可以使用脚本标记中的Java脚本将脚本标记替换为Div吗?
如果我可以将代码缩减为仅MakeWidget函数,并将其自身和script标签替换为该函数生成的html,我真的很喜欢。
编辑-我本质上是想生成在页面上调用MakeWidget函数的确切位置的HTML。
我有一个使用母版页的视图,其中包含一些需要使用Body的OnLoad执行的javascript.仅针对某些视图在我的MasterPage上设置OnLoad的最佳方法是什么?
我试过的想法是将javascript函数的名称作为ViewData传递.但我真的不希望我的控制器必须知道页面上的javascript.我真的不喜欢这种方法......
<body onload="<%=ViewData["Body_OnLoad"]%>">
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
Run Code Online (Sandbox Code Playgroud)
编辑 - 我想一个想法是使用jQuery的文档就绪事件而不是......
还有其他想法吗?
目前我用这个:
RouteTable.Routes.Add(new ServiceRoute("API", new WebServiceHostFactory(),typeof(MySite.Web.MyServiceV1)));
Run Code Online (Sandbox Code Playgroud)
要使此网址指向MyServiceV1.SVC MySite.com/API
我想使用包含/中的/的前缀但它似乎不起作用.
RouteTable.Routes.Add(new ServiceRoute("API/V2", new WebServiceHostFactory(),typeof(MySite.Web.MyServiceV2)));
Run Code Online (Sandbox Code Playgroud)
有没有更好的方式来代表这个而不必做"APIV2"?我使用的是.Net 4.0
我们在一个应用服务计划上托管3个独立的网站.此计划配置为运行3个小实例(S1).我理解这意味着3个独立的服务器,每个服务器有1个CPU.
如果三个网站中只有一个网站从单一来源(另一个离线服务器)获得非常高的流量,那么3个实例的负载如何平衡?
所有请求是循环还是全部尝试转到单个实例?我该如何控制或测试?
当有其他网站时,单个网站是否仅限于单个实例上可用资源的一小部分/一部分?
运行多个单CPU实例与使用Azure网站的多个CPU的单个实例有什么好处?(除了可用性)
我们试图加载测试其中一个站点,当我们只关闭一个站点而另外两个没有流量时,它似乎从不使用超过10-15%的CPU.这让我怀疑负载平衡.
load-balancing azure azure-web-sites azure-app-service-plans
当从导入包的 dart 文件中抛出异常时,VSCode 将自动打开该源文件以显示抛出异常的位置。一旦这个文件打开并附加到调试器,我似乎就可以在里面的任何地方添加断点。这让我相信应该可以手动添加其他文件。我想打开其他 dart 文件并将其附加到我知道被引用的调试器并添加断点。
c# ×3
.net-4.0 ×2
asp.net-mvc ×2
azure ×2
javascript ×2
achievements ×1
architecture ×1
asp.net ×1
c#-4.0 ×1
caching ×1
dapper ×1
dart ×1
datacontext ×1
flutter ×1
func ×1
game-engine ×1
html ×1
join ×1
linq ×1
master-pages ×1
merge ×1
mongodb ×1
multi-tenant ×1
query-string ×1
routes ×1
security ×1
sql ×1
sql-server ×1
wcf ×1