我需要一个真正的DBA的意见.Postgres 8.3在我的Macbook Pro上执行此查询需要200 ms,而Java和Python在20 ms(350,000行)内执行相同的计算:
SELECT count(id), avg(a), avg(b), avg(c), avg(d) FROM tuples;
Run Code Online (Sandbox Code Playgroud)
使用SQL数据库时这是正常的行为吗?
模式(该表包含对调查的响应):
CREATE TABLE tuples (id integer primary key, a integer, b integer, c integer, d integer);
\copy tuples from '350,000 responses.csv' delimiter as ','
Run Code Online (Sandbox Code Playgroud)
我用Java和Python编写了一些测试用于上下文,他们粉碎了SQL(纯Python除外):
java 1.5 threads ~ 7 ms
java 1.5 ~ 10 ms
python 2.5 numpy ~ 18 ms
python 2.5 ~ 370 ms
Run Code Online (Sandbox Code Playgroud)
即使sqlite3与Postgres竞争,尽管它假设所有列都是字符串(相比之下:即使只使用切换到数字列而不是Postgres中的整数导致10x减速)
我试过没有成功的调整包括(盲目地遵循一些网络建议):
increased the shared memory available to Postgres to 256MB
increased the working memory to 2MB
disabled connection …Run Code Online (Sandbox Code Playgroud) 如何在实体框架4中连接字符串我有一个列中的数据,我想将字符串保存为逗号分隔的字符串,如"value1,value2,value3"是否有方法或操作员在EF4中执行此操作?示例:假设我有两列Fruit并Farms具有以下值:
如果我喜欢这个
var dataSource = this.context
.Farms
.Select(f => new
{
f.Id,
Fruits = string.Join(", ", f.Fruits)
});
当然我会得到这个错误
LINQ to Entities无法识别方法'System.String Join(System.String,System.Collections.Generic.IEnumerable`1 [System.String])'方法,并且此方法无法转换为商店表达式.
这有什么解决方案吗?
sql entity-framework aggregate string-concatenation entity-framework-4
这对我来说很容易在TSQL中执行,但我只是坐在这里,试着让它在EF4中工作!
我有一个表,我们称之为TestData.它有字段,比如:DataTypeID,Name,DataValue.
DataTypeID, Name, DataValue
1,"Data 1","Value1"
1,"Data 1","Value2"
2,"Data 1","Value3"
3,"Data 1","Value4"
Run Code Online (Sandbox Code Playgroud)
我想对DataID/Name进行分组,并将DataValue连接成CSV字符串.期望的结果应包含 -
DataTypeID, Name, DataValues
1,"Data 1","Value1,Value2"
2,"Data 1","Value3"
3,"Data 1","Value4"
Run Code Online (Sandbox Code Playgroud)
现在,我正在努力做到这一点 -
var query = (from t in context.TestData
group h by new { DataTypeID = h.DataTypeID, Name = h.Name } into g
select new
{
DataTypeID = g.Key.DataTypeID,
Name = g.Key.Name,
DataValues = (string)g.Aggregate("", (a, b) => (a != "" ? "," : "") + b.DataValue),
}).ToList()
Run Code Online (Sandbox Code Playgroud)
问题是LINQ to Entities不知道如何将其转换为SQL.这是3个LINQ查询联合的一部分,我真的希望它保持这种方式.我想我可以检索数据,然后再执行聚合.出于性能原因,这对我的应用程序无效.我还考虑过使用SQL服务器功能.但这在EF4世界中似乎并不"正确".
有人在乎这个问题吗?
我有以下格式的每小时天气数据:
Date,DBT
01/01/2000 01:00,30
01/01/2000 02:00,31
01/01/2000 03:00,33
...
...
12/31/2000 23:00,25
Run Code Online (Sandbox Code Playgroud)
我需要的是每日聚合最大值,最小值,如此:
Date,MaxDBT,MinDBT,AveDBT
01/01/2000,36,23,28
01/02/2000,34,22,29
01/03/2000,32,25,30
...
...
12/31/2000,35,9,20
Run Code Online (Sandbox Code Playgroud)
在R中如何做到这一点?
这是一个我正在遇到的问题的一个简单例子,它没有与这里提出的一些想法和其他有关DDD的地方相关联.
假设我有一个ASP.NET MVC 3站点,可以创建/操作一个人.控制器访问应用程序服务层(PersonService),后者又使用域实体(EF 4 POCO)和PersonRepository进行更改并保留它们.为简单起见,我在这里省略了所有接口.在这种情况下,Person是根,为简单起见,只有电子邮件地址(也假设电子邮件不是不可变的,可以更新).
选项1:尽量坚持[我的理解] DDD的基础知识,其中与实体直接相关的行为是作为实体的一部分实现的(Person实现AddEmail,ChangeEmail等).除了Add*方法之外,唯一的问题是Person需要知道上下文或实体框架部分(这将消除任何持久性无知)或需要使用"服务"或存储库来标记修改后的电子邮件.
// Person Service
public class PersonService {
// constructor injection to get unit of work and person repository...
// ...methods to add/update a person
public EmailAddress AddEmailAddress(int personId, EmailAddress email)
{
Person p = personRepository.Find(p => p.Id == personId).First();
p.AddEmail(email);
uow.SaveChanges();
return email;
}
public EmailAddress ChangeEmailAddress(EmailAddress email)
{
Person p = personRepository.Find(p => p.Id == personId).First();
p.ChangeEmail(email);
// change state of email object here so it's updated in the next line??? …Run Code Online (Sandbox Code Playgroud) entity domain-driven-design entity-framework aggregate anemic-domain-model
是否可以在单个tapply或aggregate语句中包含两个函数?
下面我使用两个tapply语句和两个聚合语句:一个用于均值,一个用于SD.
我更愿意结合这些陈述.
my.Data = read.table(text = "
animal age sex weight
1 adult female 100
2 young male 75
3 adult male 90
4 adult female 95
5 young female 80
", sep = "", header = TRUE)
with(my.Data, tapply(weight, list(age, sex), function(x) {mean(x)}))
with(my.Data, tapply(weight, list(age, sex), function(x) {sd(x) }))
with(my.Data, aggregate(weight ~ age + sex, FUN = mean)
with(my.Data, aggregate(weight ~ age + sex, FUN = sd)
# this does not work:
with(my.Data, tapply(weight, list(age, sex), function(x) …Run Code Online (Sandbox Code Playgroud) 我是一个试图将一些东西移植到MS SQL Server的MySQL用户.
我正在加入几个表,并通过GROUP BY聚合一些列.
一个简单的例子是员工和项目:
select empID, fname, lname, title, dept, count(projectID)
from employees E left join projects P on E.empID = P.projLeader
group by empID
Run Code Online (Sandbox Code Playgroud)
...这可以在MySQL中运行,但MS SQL更严格,并且要求所有内容都包含在聚合函数中或者是GROUP BY子句的一部分.
所以,当然,在这个简单的例子中,我假设我可以在group by子句中包含额外的列.但我正在处理的实际查询非常复杂,并且包括在一些非聚合列上执行的一系列操作...即,尝试将所有这些操作包含在group by子句中会非常难看.
那么有更好的方法吗?
使用该COUNT函数编写SQL语句时,我有两个选择.
SELECT COUNT(*) FROM <table_name>SELECT COUNT(some_column_name) FROM <table_name>在性能方面,什么是最好的SQL语句?使用选项1可以获得一些性能提升吗?
我有以下样本data.table:
dtb <- data.table(a=sample(1:100,100), b=sample(1:100,100), id=rep(1:10,10))
Run Code Online (Sandbox Code Playgroud)
例如,我想通过id聚合所有列(a和b,尽管它们应该保持分开)colSums.这样做的正确方法是什么?以下不起作用:
dtb[,colSums, by="id"]
Run Code Online (Sandbox Code Playgroud)
这只是一个示例,我的表有很多列,所以我想避免在函数名中指定所有列
我有两个命名的向量
v1 <- 1:4
v2 <- 3:5
names(v1) <- c("a", "b", "c", "d")
names(v2) <- c("c", "e", "d")
Run Code Online (Sandbox Code Playgroud)
我想通过名称添加它们,即预期的结果是
> v3
a b c d e
1 2 6 9 4
Run Code Online (Sandbox Code Playgroud)
有没有办法以编程方式在R中执行此操作?请注意,名称可能不一定按排序顺序排列,v2如上所述.