我已经找到了很多有关如何调整和优化Postgres for OLTP应用程序性能的在线和打印指南,但我还没有找到任何特定于Data Warehousing应用程序的类型.由于工作负载类型存在很多差异,我确信在管理和调优数据库方面必须存在一些差异.
我自己的一些:
我从DDL方面发现我更自由地使用索引,因为我通常只担心每天插入一次并且可以使用索引重建进行批量插入.
我通常会将整数代理键用于通常具有多个自然键的数据,以实现更快的连接
我通常会定义并维护一个非常全面的日期表,该日期表具有预建日期操作(财务日期而不是日历日期,财务年月,一周的开始日期等)并且使用它而不是在select语句中使用函数和哪里的陈述.这通常有助于在CPU绑定的聚合查询期间.
我希望我能找到有关内存管理和其他数据库设置的一些信息,但我很高兴听到任何特定于基于Postgres的数据仓库的有用最佳实践.
我有一个具有属性的类,这些属性在调用setter时会触发一些副作用,例如触发的更改事件和/或渲染操作.我怎样才能设计一个只在其值需要改变时才设置属性的函数?
有了refs,我会做这样的事情:
let setIfChanged (oldVal: Ref<'T>) (newVal: 'T) = if newVal <> !oldVal then oldVal := newVal
let y = ref 0
setIfChanged y 1
Run Code Online (Sandbox Code Playgroud)
但是,可变属性不是引用,我似乎无法找到任何方法来设计将编译的东西.例如,
let setIfChanged oldVal newVal = if newVal <> oldVal then oldVal <- newVal
Run Code Online (Sandbox Code Playgroud)
只会告诉我oldVal不可变.
有没有办法注释oldVal,以便它是可变(可设置)属性?或者,还有更好的方法?
我有一个文件处理工作,目前使用带有手动管理背压的akka actor来处理处理管道,但我从未能够在输入文件读取阶段成功管理背压.
此作业采用输入文件,并按每行开头的ID号对行进行分组,然后一旦它到达具有新ID号的行,它就会通过消息将分组的行推送到处理actor,然后继续新的ID号,一直到它到达文件的末尾.
这似乎是Akka Streams的一个很好的用例,使用File作为接收器,但我仍然不确定三件事:
1)如何逐行读取文件?
2)我如何按每行上的ID分组?我目前使用非常必要的处理,我不认为我在流管道中具有相同的能力.
3)我怎样才能应用背压,这样我就不会比在下游处理数据更快地将行读入内存?
是否可以创建play.api.mvc.Controller具有依赖项注入参数的重载特征?
例如,假设我有几个定制的Action,它们需要注入依赖项AuthorizationService。我想这样写我的控制器:
class UserController extends CustomController {
def getUser(userID: String) = CustomAction {
...
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我无法弄清楚如何创建CustomController特性,从而不需要我在UserController中注入AuthorizationService。Guice有办法做到这一点吗?