- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
问题概述:
我有一些数据库表,它们描述了使用web服务从多个设备收集数据到集中数据库的过程。
存储结果的表是为了提高性能而故意取消规范化的:通过多个索引更快地查询和分组。
我使用实体框架和linq进行数据访问。
我需要使用分层分组和
投影。
设备数据库建模概述:
目前我有两种设备
一。射频识别设备
第一个表是rfidtag,它描述了收集数据的标记,1个rfidtag=1个传感器。例如,一个标签可以得到关于温度的数据。
第二个表是rfidreader,它描述了读取模块,该模块从附加的标记中收集并发送所有数据。附加到单个rfidreader的rfidtags的数量没有限制。但是,在读取期间,可以将一个rfidtag附加到一个rfidreader。
CREATE TABLE [dbo].[RfidTag]
(
Id INT IDENTITY(1,1),
CreatedDateTime DATETIME NOT NULL DEFAULT GETDATE(),
ModifiedDateTime DATETIME,
--
ReaderId INT NULL, -- Reference to reader
SensorTypeId INT NOT NULL, -- Reference to sensor type
SensorParameters NVARCHAR(50) NULL, -- Sensor parameters
Hex NVARCHAR(50) NOT NULL, -- Hex tag identifier stored as string
Name NVARCHAR(50) NOT NULL, -- Tag name
[Description] NVARCHAR(200) NULL, -- Tag description
--
)
CREATE TABLE [dbo].[RfidReader]
(
Id INT IDENTITY(1,1),
CreatedDateTime DATETIME NOT NULL DEFAULT GETDATE(),
ModifiedDateTime DATETIME,
--
Name NVARCHAR(20), -- Tag name
[Description] NVARCHAR(200), -- Tag description
SerialNumber NVARCHAR(12), -- Unique device serial name
--
)
CREATE TABLE [dbo].[RfidReaderPlacement]
(
Id INT IDENTITY(1,1),
CreatedDateTime DATETIME NOT NULL DEFAULT GETDATE(),
--
ReaderId INT NOT NULL, -- Reference to Reader.
MeasurementZoneId INT NOT NULL, -- Reference to Measurement Zone.
StartDate DATETIME NOT NULL, -- Start date of reading.
StopDate DATETIME, -- End date of reading.
--
)
CREATE TABLE [dbo].[RfidReading]
(
Id INT IDENTITY(1,1),
CreatedDateTime DATETIME NOT NULL DEFAULT GETDATE(),
ModifiedDateTime DATETIME,
--
ReaderPlacementId INT NOT NULL, -- Reference to Rfid Reader Placement
ConstructionId INT NOT NULL, -- Reference to Construction
MeasurementZoneId INT NOT NULL, -- Reference to Measurement Zone
ReaderId INT NOT NULL, -- Reference to Rfid Reader
TagId INT NOT NULL, -- Reference to Rfid Tag
SensorTypeId INT NOT NULL, -- Reference to Sensor Type
ReadingDate DATETIME NOT NULL, -- Reading date
Value FLOAT NOT NULL -- Measured value
--
)
CREATE TABLE [dbo].[ZigBeeNodeProbe]
(
Id INT IDENTITY(1,1),
CreatedDateTime DATETIME NOT NULL DEFAULT GETDATE(),
--
NodeId INT NULL, -- Reference to node
SensorTypeId INT NOT NULL, -- Reference to sensor type
SensorParameters NVARCHAR(50) NULL, -- Sensor parameters
SocketNumber INT NOT NULL, -- Socket number used in parent ZigBeeNode
Name NVARCHAR(50) NOT NULL, -- Node name
[Description] NVARCHAR(200) NULL, -- Node description
--
)
CREATE TABLE [dbo].[ZigBeeNode]
(
Id INT IDENTITY(1,1),
CreatedDateTime DATETIME NOT NULL DEFAULT GETDATE(),
ModifiedDateTime DATETIME,
--
ReaderId INT NULL, -- Reference to reader
NetworkAddress NVARCHAR(50) NOT NULL,-- Node address in ZigBee network
Name NVARCHAR(50) NOT NULL, -- Given name
[Description] NVARCHAR(200) NULL, -- Tag description
SocketCount INT NOT NULL DEFAULT 0, -- Count of available sockets to plug in probe
NodeFrequency INT NULL, -- Node frequency
)
CREATE TABLE [dbo].[ZigBeeReader]
(
Id INT IDENTITY(1,1),
CreatedDateTime DATETIME NOT NULL DEFAULT GETDATE(),
ModifiedDateTime DATETIME,
--
Name NVARCHAR(20), -- Tag name
[Description] NVARCHAR(200), -- Tag description
SerialNumber NVARCHAR(12), -- Unique device serial name
--
)
CREATE TABLE [dbo].[ZigBeeReaderPlacement]
(
Id INT IDENTITY(1,1),
CreatedDateTime DATETIME NOT NULL DEFAULT GETDATE(),
--
ReaderId INT NOT NULL, -- Reference to Reader.
MeasurementZoneId INT NOT NULL, -- Reference to Measurement Zone.
StartDate DATETIME NOT NULL, -- Start date of reading.
StopDate DATETIME, -- End date of reading.
--
)
CREATE TABLE [dbo].[ZigBeeReading]
(
Id INT IDENTITY(1,1),
CreatedDateTime DATETIME NOT NULL DEFAULT GETDATE(),
ModifiedDateTime DATETIME,
--
ReaderPlacementId INT NOT NULL, -- Reference to ZigBee Reader Placement
ConstructionId INT NOT NULL, -- Reference to Construction
MeasurementZoneId INT NOT NULL, -- Reference to Measurement Zone
ReaderId INT NOT NULL, -- Reference to ZigBee Reader
NodeId INT NOT NULL, -- Reference to ZigBee Node
ProbeId INT NOT NULL, -- Reference to ZigBee Node Probe
SensorTypeId INT NOT NULL, -- Reference to Sensor Type
ReadingDate DATETIME NOT NULL,-- Reading date
Value FLOAT NOT NULL -- Measured value
--
)
RfidReader
-- RFidTag
-- RFidTag
...
ZigBeeReader
-- ZigBeeNode
---- ZigBeeNodeProbe
---- ZigBeeNodeProbe
---- ZigBeeNodeProbe
-- ZigBeeNode
---- ZigBeeNodeProbe
---- ZigBeeNodeProbe
---- ZigBeeNodeProbe
...
public class ReadingReaderDataModel
{
public string SeriesName { get; set; }
public ReadingPeriod ReadingPeriod { get; set; }
public IEnumerable<ReadingNodeDataModel> ReadingNodeDataModels { get; set; }
public ReadingReaderDataModel()
{
ReadingNodeDataModels = new List<ReadingNodeDataModel>();
}
}
public class ReadingNodeDataModel
{
public string NodeName { get; set; }
public IEnumerable<double> DataValues { get; set; }
public ReadingNodeDataModel()
{
DataValues = new LinkedList<double>();
}
}
public enum ReadingPeriod
{
OneMonth, ThreeMonths, SixMonths, YearToDay, OneYear, All
}
public enum ReaderType
{
Rfid, ZigBee
}
最佳答案
据我所知,一个数据库中有数百万条记录,需要应用程序有很好的性能,而且结构非常复杂。
离英孚远点,我是认真的。您可以将它用于较小的数据集,但对于任何需要从大型查询获得卓越性能的数据集,甚至都不要使用它。
我的建议是手动编写查询,因为如果您希望使用ef尽可能优化,那么实际上无论如何都不能跳过很多代码,而且基本上是用linq方式编写sql(即指定所有select语句)。
如果你想更具体一点,就用得体一点。是“orm”运行stackoverflow。这里有速度比较:http://code.google.com/p/dapper-dot-net/
但是,如果你已经决定使用ef…
不要试图编写一个查询。不会发生的。相反,把它们分开。为你需要的每一组做一个不同的。这是目前为止最简单的出路。我相信你应该已经有了一个linq查询,只得到一个组。现在对你需要的其他组重复这个步骤,特别是如果你有大量的where和orderby在其中。
资料来源:一个每天处理大型数据集查询的人。
关于c# - 分层数据的高级LINQ分组和投影查询(EF 4.0 + LINQ + ASP.NET MVC + HighCharts),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10874835/
每当我设置 Border.Effect属性的投影效果 控件中包含的每个控件都有一个投影。 有没有办法将阴影设置到边框而不是边框中包含的每个控件? 这是我的代码的一个简短示例:
我正在尝试创建一个带有阴影的对象。我相信您需要 CSS3 来执行此操作,到目前为止我已经有了类似的东西。 div { width:300px; height:100px; background
我希望能够为我的 drawables 文件夹中的矢量添加阴影。目前,当我将具有阴影的 svg 导入 Android Studio 时,转换为 xml 会删除阴影。 我将如何在 Android Stud
使用 NHibernate 2.1,我试图将一个实体及其子集合投影到 DTO 中。我的实体看起来像这样.. public class Application { public int Id {ge
我有问题还是好,我不知道如何将x,y,z值的3d点转换为2d点, 我必须绘制投影,其中的点确实有x,y,z值,但是我不知道如何将它们转换为2d,所以我可以将它们移动到我的轴上。 我一直在寻找Wiki和
我有域类位置 public abstract class BaseEntity where T: struct { public virtual T Id { get; set
我有一个使用 Android Material 图标作为背景的 ImageView 。我尝试添加标高以创建投影效果,但仅显示图标。是否可以将标高添加到矢量资源可绘制对象中? 矢量代码:
我正在尝试连接并以逗号分隔(或空格)列表并将其投影。我在下面有一些示例代码。 public class Friend { public string Name { get; set; } }
是否有任何库可以轻松地允许 Java bean 投影? 我有一个按照 Javabean 约定用 getter 和 setter 编写的 bean,并且在运行时在不同的地方我想要获取一个完全填充的 be
我可以成功地做到: point.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:
我对 OpenLayers 3 有点问题。我有以下脚本: var map = new ol.Map({ view : new ol.View({ center : [5.611
我正在尝试向 ImageView 添加阴影。 Stackoverflow 的另一个答案似乎是使用 Canvas 和位图等,比需要的复杂得多。 在 iOS 上我会做这样的事情: myImageView.
我有一个 JPanel 元素,我想给它添加一个阴影,我怎样才能给元素添加一个漂亮的褪色阴影?我需要使用外部库还是可以使用内置的东西? 例子: 最佳答案 所以我查看了 swingx它扩展了 JPanel
如何使用 MongoDB 查询预测作者的名字 { name: "Wings Of Fire", author: { first: "Abdul", last: "Kalam" } }
我有一个集合“帐户”,其中包含类似于此结构的文档: { "email" : "john.doe@acme.com", "groups" : [ {
我试图弄清楚如何使用枚举列表(@ElementCollection)对实体进行 DTO 投影。不幸的是,缺少 QueryDsl 文档,在这里我只能找到版本 3 的结果 不是 适用于版本 4。 @Ent
我想要悬停 div 时出现的箭头 here也投下影子。箭头是从 CSS 绘制的: .arrow { position:absolute; margin-top:-50px; left:80px; bo
如何使用 QueryOver 和 AliasToBean 将枚举值转换为字符串值?我有以下但在尝试转换 Enum 时出错: SomeDTO someDTO = null;
我有这个外部 GeoJSON 文件: {"type": "FeatureCollection", "features": [ {"type":"Feature", "id":382, "propert
我对 Hibernate 的预测和标准有点困惑。何时使用预测以及何时使用标准? 最佳答案 它们并不相互排斥,您可以同时使用两者。预测通常在某些标准的背景下使用。 简单地说,Hibernate Proj
我是一名优秀的程序员,十分优秀!