0

我有一个uniqueidentifierSQL 数据库

CREATE TABLE [dbo].[Response]
(
    ...
    [Id]  uniqueidentifier NOT  NULL
    ..
)

映射到System.Guid

public class Response
{
   public Guid Id { get; set;}
}

我使用 SSAS(Sql Server 分析服务),其中列映射为

{
    "name": "Id",
    "dataType": "string",
    "sourceColumn": "Id"
},

我遇到了我所在定价层的内存限制,并且正在探索减少行内存消耗的想法。

我可以将 GUID 转换为更小的 Int32,同时对刷新 SSAS 的仓库/数据湖执行 ETL。但是,我使用 Id 通过 API 过滤数据。这样做将需要我的 API 也知道翻译。

问题

我想知道是否有更好的数据类型可以在进行大规模重构之前减少我的内存占用。


一切都不是指导。如果你明白我的意思

4

1 回答 1

1

表格模型专家会立即摒弃在模型中保留随机字符串或唯一 ID 的想法。您根本不应该这样做,因为无法优化此类列。

话虽如此,我知道表格经常被用作内存数据库。这个指导栏是如何使用的?您是在寻找一个记录还是一系列记录?如果您查找单行,一个简单的查找表可能会对您有所帮助。例如,如果每分钟的响应少于 1000 个,您可以在该特定分钟内存储日期 + 记录索引。通常无论如何都会存储日期,因此您基本上删除 guid 并将其替换为具有少于 1k 个唯一值和查找表的 int 列。10 亿个 guid 和 1-1000 之间的 10 亿个整数(甚至更好的 0-9 之间的 4 个整数)之间的差异将是巨大的。这种解决方案的主要缺点是额外的查询会将 guid 转换为日期 + 索引、复杂性和缺乏灵活性。

于 2017-12-29T13:29:00.213 回答