输入示例:
SELECT * FROM test; id | percent ----+---------- 1 | 50 2 | 35 3 | 15 (3 rows)
你会怎么写这样的查询,平均50%的时间我可以获得id = 1的行,35%的时间行id = 2,15%的时间行id = 3?
我尝试了类似的东西SELECT id FROM test ORDER BY p * random() DESC LIMIT 1
,但它给出了错误的结果.经过10,000次运行后,我得到了一个类似于的发行版{1=6293, 2=3302, 3=405}
,但我预计发行版几乎是:{1=5000, 2=3500, 3=1500}
.
有任何想法吗?
只是感兴趣,为什么下面(简化)的例子以这种方式工作.
CREATE TABLE test (id SERIAL, val INT NOT NULL, PRIMARY KEY(id));
INSERT INTO test (val) VALUES (1);
WITH t AS ( UPDATE test SET val = 1 RETURNING id )
DELETE FROM test WHERE id IN ( SELECT id FROM t);
Run Code Online (Sandbox Code Playgroud)
结果:
DELETE 0
问题:
为什么DELETE没有找到要删除的行?
PostgreSql版本9.2.1
事务隔离=读取提交
谢谢!
我有几个工人,使用ArrayBlockingQueue.
每个worker从队列中获取一个对象,对其进行处理,结果可以得到几个对象,这些对象将被放入队列中进行进一步处理.所以,工人=生产者+消费者.
工人:
public class Worker implements Runnable
{
private BlockingQueue<String> processQueue = null;
public Worker(BlockingQueue<String> processQueue)
{
this.processQueue = processQueue;
}
public void run()
{
try
{
do
{
String item = this.processQueue.take();
ArrayList<String> resultItems = this.processItem(item);
for(String resultItem : resultItems)
{
this.processQueue.put(resultItem);
}
}
while(true);
}
catch(Exception)
{
...
}
}
private ArrayList<String> processItem(String item) throws Exception
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
主要:
public class Test
{
public static void main(String[] args) throws Exception
{
new Test().run();
}
private …
Run Code Online (Sandbox Code Playgroud) 是)我有的:
表的简化模式,将是非常大的:
id| integer | not null default nextval('table_id_seq'::regclass)
url_id | integer | not null
domain_id | integer | not null
position | integer | not null
Run Code Online (Sandbox Code Playgroud)
上面的架构的问题是我没有关于如何对其进行分区的确切答案.将使用所有期间的数据(没有查询将具有日期过滤器).
我想过在"domain_id"字段上进行分区,但问题是很难预测每个分区会有多少行.
我的主要问题是:
如果我不使用分区修剪而且我不打算删除旧数据,那么分区数据是否有意义?
什么是利弊?
如果我不进行分区,如何降低我的导入速度?
另一个与规范化有关的问题:
url应该导出到另一个表吗?
正常化的优点
非规范化的优点
任何人都可以给我任何建议吗?谢谢!
这是表格(简化):
Table "public.link" Column | Type | Modifiers ---------------+-----------------------------+--------------------------------------------------- id | integer | not null default nextval('link_id_seq'::regclass) page_id | integer | placed_at | timestamp without time zone | default now() Indexes: "link_pkey" PRIMARY KEY, btree (id) "link_page_id_index" btree (page_id) Foreign-key constraints: "link_page_id_foreign_key" FOREIGN KEY (page_id) REFERENCES page(id) ON UPDATE RESTRICT ON DELETE RESTRICT
这里是查询(简化):
UPDATE link SET page_id = ?, placed_at = now()
WHERE id IN ( SELECT id FROM link ... ) AND page_id IS NOT NULL
死锁消息:
ERROR: …