OData适用于多租户LOB应用吗?

时间:2013-01-20 12:13:07

标签: sql-server entity-framework search odata

我正在开发基于云的业务线应用程序。用户可以将文档和其他类型的对象上载到应用程序。用户上传了大量文档,并且存储了数百万个文档。我使用SQL Server。

今天我有一个有点宁静的API,它允许用户传入DocumentSearchQuery实体,在那里他们提供关键字以及请求排序顺序和分页信息。他们得到一个DocumentSearchResult,它实际上是对实际文档的引用的有序集合。

我现在想要将搜索API扩展到除文档之外的其他实体类型,我正在考虑使用OData。但我得到的印象是,如果我使用OData,我将面临几个问题:

  • 用户可以查询哪些字段没有内置限制,这意味着perf将取决于他们是否查询索引字段,或者我将不得不实现我自己对传入OData请求的解析以确保它们仅查询索引字段。 (由于它是一个多租户应用程序,并且它们共享物理硬件,因此慢速查询不可接受,因为这会影响其他客户)
  • 无论我用什么来访问后端数据都需要支持IQueryable。我目前正在使用Entity Framework来实现这一点,但我将来可能会使用其他东西。这意味着我可能需要再次对传入的查询进行解析。
  • 没有内置支持来限制用户可以访问的数据。我需要验证传入的Odata查询,以确保他们访问他们实际有权访问的数据。

我认为我不想走手动解析传入表达式树的路,以确保它们只尝试访问他们有权访问的数据。这看起来很麻烦。

我的问题是:考虑到上述情况,在多租户环境中使用OData是一种合适的协议,客户可以在其中编写自己的客户端来访问实体吗?

1 个答案:

答案 0 :(得分:1)

我觉得这里很合适。让我就你认为你将面临的问题给出一些看法:

  

用户可以查询哪些字段没有内置限制   perf是否依赖于他们是否查询索引字段或   不,或者我将不得不实现我自己的传入OData解析   请求以确保它们仅查询索引字段。 (因为它是一个   多租户应用程序,他们共享物理硬件,速度慢   查询不是真的可以接受,因为那些影响其他客户)

真。但是,您可以检查过滤器中允许的字段以允许操作或拒绝它。

  

无论我用什么来访问后端数据都需要支持   IQueryable的。我目前正在使用Entity Framework来做到这一点,但是   我将来可能会使用其他东西。这意味着它   可能我需要再次自己解析传入的查询。

是的,EF有一个提供商。这意味着如果您将来使用其他东西,您将需要编写自己的提供商。如果你改变EF可能你早就做出了决定。在这种情况下,我不推荐使用WCF DS。

  

没有内置支持来限制用户可以访问的数据。一世   需要验证传入的Odata查询以确保它们访问数据   他们实际上有权访问。

对于WCF数据服务,没有任何开箱即用的支持,对吧。但是,这是您需要实施的授权机制的一部分。但是我有一个好消息:使用QueryInterceptors这很容易。简单地拦截查询,并根据用户权限。您必须独立使用您所使用的技术来实现它。

我的回答:考虑到上述情况,WCF数据服务是多租户环境中的合适协议,客户编写自己的客户端访问实体至少更改EF。你应该记住它为你节省的巨大努力。