标题:SQL 查询:行为和用法概述 描述:了解所有 SQL 查询运算符和子句 NCache 支持及其在缓存管理中发挥的作用。
典范: https://www.alachisoft.com/resources/docs/ncache/prog-guide/sql-ncache.html
SQL 查询:行为和用法概述
NCache 是一个键值缓存,其中每个新对象都根据唯一键存储。 类似于主键查找数据的关系数据库, NCache 允许您通过指定相应的键来检索该数据。 但是很多实际场景需要具备灵活的搜索能力,根据不同的属性获取数据,而不仅仅是主键。 由于大多数高事务性应用程序都将数据保存在缓存中,因此非常需要查询数据的能力。
SQL 查询:缓存中查询的重要性
假设有一个电子商务网站,根据类别、价格、重量等一系列条件查询产品。为了提高应用程序性能,使用分布式缓存系统似乎是一个合适的解决方案。 但是,失去查询能力或重写应用程序是不可接受的。
在这种情况下 NCache 是一种理想的分布式缓存,可以在不影响查询能力的情况下扩展应用程序性能。 具体来说, NCache 使你能够 查询缓存数据 基于不同的属性使用类似 SQL 的查询语法。 通过雇用 NCache 对于前面提到的场景,您可以使用类别、价格或重量作为条件来查询所有产品。
备注
NCache 允许使用类似 SQL 的查询语法在缓存中搜索和删除数据。
NCache 提供了检索的灵活性 预测,整个对象,仅缓存键,或键值对本身根据您的要求。 而且, NCache 也支持 基本查询运算符, 逻辑运算符及 聚合函数 由 SQL 提供。
运行流程
In NCache,由于分区,数据分布在不同的集群节点上。当有一千个客户时,使用其 ID 搜索客户可能很容易。然而,当记录分布在不同的节点上并且查询条件可以是任何客户属性时,查找百万分之一的复杂性就不同了。在这种情况下,缓存中的查询需要高效的数据搜索机制。
尤其是, NCache 员工 索引 和 分布式查询 支持缓存中的实时 SQL-like 搜索功能。 索引使属性可在缓存中搜索。 一旦根据索引添加了一个项目,它就会在客户端连接到的节点上作为查询结果返回。 同时,当数据分布在Partitioned Topology中时,查询以分布式方式执行。
重要
必须为属性编制索引才能在缓存中进行搜索。
索引
传统数据库使用索引来提高查询性能。 然而, NCache 使用 索引 作为强制性的,以便通过类似 SQL 的查询进行搜索。 要查询缓存数据,首先需要对所有可搜索的属性进行索引。 需要注意的是,projections 和 criteria 中指定的字段必须被索引。 一旦为属性定义了索引,任何添加到缓存中的相关数据都会自动编入索引并变得可搜索。 因此,定义一次索引就足够了。
备注
由于索引,读取操作要快得多,但每次写入操作都会产生开销。
NCache 使用索引,因为它是一种面向性能的方法。 索引消除了在搜索查询结果集时查询缓存中的每个条目的需要。 这加快了搜索机制并节省了时间和计算能力。
警告
不要索引不必要的字段,因为它会导致内存和性能开销。
分布式查询
执行的查询 NCache 根据缓存拓扑和底层客户端连接而变化。 在镜像或复制拓扑的情况下,查询仅在客户端连接的节点上执行。 但是,当数据跨集群节点分区时不会发生这种情况。
查询 分区集群 主要由于数据分区而以分布式方式执行。 由于客户端连接到所有集群节点,因此查询在每个节点上单独执行。 从各个节点返回由所需数据组成的结果集,并进行合并,然后将最终结果返回给客户端。 这里,性能还依赖于集群节点的数量以及每个节点返回的结果集的大小。
备注
中的分布式查询 NCache 具有高度可扩展性。
分布式查询产生更高的可扩展性 NCache 由于分区数据及其并行执行。 当新节点加入集群时,每个成员的分区数据会减少。 因此,减少了每个服务器节点执行查询所花费的时间。 此外,由于每个节点上的并发执行,网络流量也减少了。
中的 SQL 查询 NCache
NCache 允许您分别使用类似 SQL 的 SELECT 和 DELETE 查询来搜索和删除缓存数据。 当前不支持 INSERT 和 UPDATE 操作。 执行阅读器 用于在缓存中执行SELECT查询,并将结果集返回给一个实例 缓存读取器. 执行标量 执行查询,并返回查询返回的结果集中第一行的第一列,任何其他列或行都将被忽略。
执行非查询 用于从缓存中删除项目。 如果已定义查询索引,则可以查询所有原始数据类型和可为空的类型。
重要
确保关闭实例 ICacheReader
执行后,因为需要清理资源。
查询语言允许您根据需要的数据指定非主键条件。 您可以执行查询以使用不同的投影和条件查询缓存中的数据。 但是,投影和标准中指定的属性必须被索引。 此外,根据您的要求,您可以灵活地只检索缓存键或检索满足给定查询条件的整个项目。
索引类型
如果要查询缓存中的某个属性,首先应该对其进行索引。 NCache 提供了几种灵活的方式 索引. 考虑到对预定义(静态)索引的需求, NCache 允许您提前为可搜索属性手动定义索引。 定义静态索引的一种方法是通过 配置。 另外,您也可以 以编程方式定义索引.
另一方面, 动态索引 例如组、标签和命名标签是在运行时为属性自动创建的。 运行时索引允许您根据逻辑组、标签和命名标签查询缓存中的数据。
使用 SQL 预测进行查询
NCache 允许您根据查询从缓存存储中检索类的所有索引属性或特定投影。 NCache 支持不同的 预测 以方便高效的搜索。 当涉及到查询时,投影在提高应用程序的性能方面发挥着重要作用。 例如,您只想检索特定类别中产品的可用单位列。 在这种情况下,您可以使用以下 SELECT 查询。
SELECT UnitsInStock FROM FQN.Product WHERE Category = "Sample_Category"
备注
为了提高性能,最好只查询必要的列,因为返回完整的对象成本很高。
值得注意的是,通过仅检索所需的列,检索所有索引属性的额外开销 Product
避免上课。 这样, NCache 帮助用户通过改进的查询语法来提高性能。
查询键和对象
根据您的要求,您可以仅检索缓存键或与查询关联的数据。 如果您只需要枚举键, NCache 只允许您检索密钥。这是一种有效的方法,因为从缓存中获取的数据大小显着减少了。因此,您可以使用它来增强性能。
ExecuteReader
有一个选择 getData
,仅针对密钥检索将其设置为 false。默认情况下,其值为 true。如果需要对数据进行进一步处理,可以使用默认值来查询对象。
支持的查询运算符
您可以使用由 NCache 根据您所需的查询条件从缓存中获取所需的结果集。
支持以下运算符类别 NCache 查询:
产品类别 | 操作者 |
---|---|
基本查询运算符 | = , == , != , <> , < , > , <=, >=, IN, LIKE , NOT LIKE |
逻辑运算符 | 与、或、非 |
聚合函数 | 总和、计数、平均值、最小值、最大值 |
其他 | GROUP BY、ORDER BY、DateTime.Now、DateTime(“任何日期时间兼容字符串”) |
详情请参阅 查询运算符 部分。
客户端缓存
NCache 假设 客户端缓存 (L1 缓存)可能有部分数据。 考虑到 L1 缓存中不能保证完整的数据,查询总是发生在服务器缓存(L2)中 NCache. 如果在执行查询的客户端启用了一级缓存,则不会影响查询的执行行为。 查询将直接在服务器缓存上执行。 但是,当集群缓存中的数据因 DELETE 查询而发生更改时,L1 会与 L1 缓存同步。
虽然客户端缓存不影响查询执行 NCache, 它可以在性能增强方面发挥重要作用。 例如,您想对查询结果集执行进一步的操作,但从缓存中获取数据可能会损害您的应用程序性能。 如果客户端缓存配置了 L2 缓存,您可以使用单个 GetBulk
称呼。 这可以节省时间并避免性能下降,因为与 L2 缓存相比,在客户端缓存上执行的操作要快得多。