想象一下PostgreSQL 9.0上具有以下结构的表:
create table raw_fact_table (text varchar(1000));
Run Code Online (Sandbox Code Playgroud)
为了简化起见,我只提到一个文本列,实际上它有十几个.该表有100亿行,每列有很多重复.该表是使用COPY FROM从平面文件(csv)创建的.
为了提高性能,我想转换为以下星型模式结构:
create table dimension_table (id int, text varchar(1000));
Run Code Online (Sandbox Code Playgroud)
然后将事实表替换为如下事实表:
create table fact_table (dimension_table_id int);
Run Code Online (Sandbox Code Playgroud)
我当前的方法是基本上运行以下查询来创建维度表:
Create table dimension_table (id int, text varchar(1000), primary key(id));
Run Code Online (Sandbox Code Playgroud)
然后创建填充我使用的维度表:
insert into dimension_table (select null, text from raw_fact_table group by text);
Run Code Online (Sandbox Code Playgroud)
之后我需要运行以下查询:
select id into fact_table from dimension inner join raw_fact_table on (dimension.text = raw_fact_table.text);
Run Code Online (Sandbox Code Playgroud)
想象一下,通过多次将所有字符串与所有其他字符串进行比较,我获得了可怕的性能.
在MySQL上,我可以在COPY FROM期间运行存储过程.这可以创建字符串的哈希值,并且所有后续字符串比较都是在哈希而不是长原始字符串上完成的.这似乎不可能在PostgreSQL上,我该怎么办?
样本数据将是包含类似内容的CSV文件(我也使用整数和双精度的引号):
"lots and lots of text";"3";"1";"2.4";"lots of text";"blabla"
"sometext";"30";"10";"1.0";"lots of text";"blabla"
"somemoretext";"30";"10";"1.0";"lots of text";"fooooooo"
Run Code Online (Sandbox Code Playgroud) 我需要在php中实现以下模式:
class EventSubscriber
{
private $userCode;
public function __construct(&$userCode) { $this->userCode = &$userCode; }
public function Subscribe($eventHandler) { $userCode[] = $eventHandler; }
}
class Event
{
private $subscriber;
private $userCode = array();
public function __construct()
{
$this->subscriber = new Subscriber($this->userCode)
}
public function Subscriber() { return $this->subscriber; }
public function Fire()
{
foreach ($this->userCode as $eventHandler)
{
/* Here i need to execute $eventHandler */
}
}
}
class Button
{
private $eventClick;
public function __construct() { $this->eventClick = new …Run Code Online (Sandbox Code Playgroud) //remove line breaks
function safeEmail($string) {
return preg_replace( '((?:\n|\r|\t|%0A|%0D|%08|%09)+)i' , '', $string );
}
/*** example usage 1***/
$from = 'HTML Email\r\t\n';
/*** example usage 2***/
$from = "HTML Email\r\t\n";
if(strlen($from) < 100)
{
$from = safeEmail($from);
echo $from;
}
Run Code Online (Sandbox Code Playgroud)
1返回HTML Email\r\t \n,而2返回HTML Email
什么是报价?
实现循环UITableView的最佳方法是什么,而不是在用户滚动到表的边界时显示空格,它只是循环包裹?这里的示例可能是选择星期几,24小时工作小时,或者按顺序在全球范围内订购时区.有一些想法如何破解这个(可能是从中间开始的100x7天的列表),但没有什么优雅.
有没有人对此有任何想法或经验?
大卫
我正在使用BlockingQueue:s(尝试使用ArrayBlockingQueue和LinkedBlockingQueue)在我正在处理的应用程序中的不同线程之间传递对象.性能和延迟在这个应用程序中相对重要,所以我很好奇使用BlockingQueue在两个线程之间传递对象需要多长时间.为了衡量这一点,我写了一个简单的程序,有两个线程(一个消费者和一个生产者),我让生产者将时间戳(使用System.nanoTime())传递给消费者,参见下面的代码.
我记得在某个论坛上的某个地方读过,对于试过这个的人来说花了大约10微秒(不知道操作系统和硬件是什么),所以当我花了大约30微秒时,我并不感到惊讶Windows 7机箱(英特尔E7500核心2双核CPU,2.93GHz),同时在后台运行许多其他应用程序.然而,当我在速度更快的Linux服务器(两个Intel X5677 3.46GHz四核CPU,运行Debian 5和内核2.6.26-2-amd64)上进行相同的测试时,我感到非常惊讶.我预计延迟会低于我的Windows框,但相反它会高得多 - 约75 - 100微秒!两个测试都是使用Sun的Hotspot JVM版本1.6.0-23完成的.
有没有其他人在Linux上做过类似的测试?或者有人知道为什么Linux上的速度会慢得多(硬件更好),与Windows相比,Linux上的线程切换是否会慢得多?如果是这种情况,看起来Windows实际上更适合某种应用程序.任何帮助我理解相对较高的数字的帮助都非常感谢.
编辑:
在DaveC的评论之后,我还做了一个测试,我将JVM(在Linux机器上)限制为单个核心(即在同一核心上运行的所有线程).这大大改变了结果 - 延迟降至20微秒以下,即优于Windows机器上的结果.我还做了一些测试,我将生产者线程限制为一个核心,将消费者线程限制为另一个核心(尝试将它们放在同一个套接字和不同的套接字上),但这似乎没有帮助 - 延迟仍然是〜75微秒.顺便说一句,这个测试应用程序几乎就是我在执行测试时在机器上运行的所有应用程序.
有谁知道这些结果是否有意义?如果生产者和消费者在不同的核心上运行,它真的应该慢得多吗?任何输入都非常感谢.
再次编辑(1月6日):
我尝试对代码和运行环境进行不同的更改:
我将Linux内核升级到2.6.36.2(从2.6.26.2开始).内核升级后,测量时间变为60微秒,变化非常小,从升级前的75-100开始.为生产者和消费者线程设置CPU关联性没有任何影响,除非将它们限制在同一个核心.在同一核心上运行时,测得的延迟为13微秒.
在原始代码中,我让生产者在每次迭代之间进入休眠1秒钟,以便给消费者足够的时间来计算经过的时间并将其打印到控制台.如果我删除对Thread.sleep()的调用,而是让生产者和消费者在每次迭代中调用barrier.await()(消费者在将经过的时间打印到控制台后调用它),则测量的延迟从60微秒至10微秒以下.如果在同一核心上运行线程,则延迟低于1微秒.任何人都可以解释为什么这会显着减少延迟?我的第一个猜测是,这个改变产生了生成器在消费者调用queue.take()之前调用queue.put()的效果,所以消费者永远不必阻止,但在玩了一个修改版本的ArrayBlockingQueue后,我发现这个猜测是假的 - 消费者确实阻止了.如果您有其他猜测,请告诉我.(顺便说一句,如果我让生产者同时调用Thread.sleep()和barrier.await(),则延迟保持在60微秒).
我还尝试了另一种方法 - 而不是调用queue.take(),我调用了queue.poll(),超时为100微秒.这会将平均延迟降低到10微秒以下,但当然会占用更多的CPU(但繁忙等待的CPU密集程度可能更低).
再次编辑(1月10日) - 问题解决了:
ninjalj认为~60微秒的延迟是由于CPU不得不从更深的睡眠状态唤醒 - 而且他是完全正确的!在BIOS中禁用C状态后,延迟减少到<10微秒.这就解释了为什么我在上面的第2点获得了更好的延迟 - 当我更频繁地发送对象时,CPU保持足够忙,不能进入更深的睡眠状态.非常感谢所有花时间阅读我的问题并在此分享您的想法的人!
...
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.CyclicBarrier;
public class QueueTest {
ArrayBlockingQueue<Long> queue = new ArrayBlockingQueue<Long>(10);
Thread consumerThread;
CyclicBarrier barrier = new CyclicBarrier(2);
static final int RUNS = 500000;
volatile int sleep = 1000;
public void start() {
consumerThread = new Thread(new Runnable() {
@Override
public …Run Code Online (Sandbox Code Playgroud) "静态方法可能无法与实例字段通信,只能与静态字段通信".我得阅读这个引用的行.当我在这个论坛中研究其他线程时,我发现我们可以在静态方法中使用实例字段,反之亦然.那么,这个引用意味着什么?这是真的吗?
使用其中一个新排序顺序创建的数据库即使安装了Service Pack 2(SP2)也无法在Access 2007中打开.
我在我的网站上使用了很多jquery/js.我需要测试我的jquery性能并提高其性能.是否有任何工具来监控jquery性能?
我想在我的jsf-application中提供不同的语言.
我已经找到了解释,我想知道如果没有faces-config我也可以这样做(因为我没有使用一个,因为jsf2有注释).
我可以用另一种方式吗?或者我是否必须创建faces-config.xml?
谢谢你的帮助:-)欢呼
我想用mvn生成一个站点,但我无法将其配置为生成index.html.
我可以运行不同的报告,例如:
$ mvn javadoc:javadoc # generates target/site/apidocs
$ mvn cobertura:cobertura # generates target/site/cobertura
Run Code Online (Sandbox Code Playgroud)
但
$ mvn site:site
Run Code Online (Sandbox Code Playgroud)
不生成任何东西.我想要的是mvn site:site自动生成报告和网站target/site.我还不需要部署它.
作为参考,这是我的pom.xml.我也补充说src/site/site.xml,但结果是相似的.
java ×4
php ×2
callback ×1
delegates ×1
etl ×1
fact-table ×1
iphone ×1
jquery ×1
jsf ×1
jsf-2 ×1
latency ×1
linux ×1
maven-3 ×1
ms-access ×1
oop ×1
postgresql ×1
star-schema ×1
static ×1
uitableview ×1