我在SQL数据库中有uniqueidentifier
CREATE TABLE [dbo].[Response]
(
...
[Id] uniqueidentifier NOT NULL
..
)
映射到System.Guid
public class Response
{
public Guid Id { get; set;}
}
我使用SSAS(Sql Server Analysis Service)将列映射为
{
"name": "Id",
"dataType": "string",
"sourceColumn": "Id"
},
我遇到了我所处的定价层的内存限制,正在探索减少行内存消耗的想法。
我可以在将ETL执行到刷新SSAS的仓库/数据湖时将GUID转换为较小的Int32。但是,我使用Id通过API过滤数据。这样做也需要我的API知道翻译。
我想知道是否有更好的数据类型可以在制作巨大的重构之前减少我的内存占用。
一切都不是Guid。如果你知道我的意思
答案 0 :(得分:1)
表格模型专业人员会立即忽略在模型中保留随机字符串或唯一ID的想法。你根本不应该这样做,因为这些列无法优化。
话虽如此,我知道通常表格被用作内存数据库。这个guid专栏是如何使用的?您是在寻找一条记录还是一系列记录?如果您查找单行,简单的查找表可能会对您有所帮助。例如,如果每分钟响应少于1000个,则可以在该特定分钟内存储日期+记录索引。通常,无论如何都存储日期,因此您基本上删除了guid并将其替换为具有少于1k个唯一值和查找表的int列。 11000之间(10-9之间甚至更好的4个整数)的10亿个指标和10个整数之间的差异将是巨大的。这种解决方案的主要缺点是额外的查询,它将guid转换为日期+索引,复杂性和缺乏灵活性。