我需要执行250万次查询.此查询生成我需要的一些行,AVG(column)
然后使用它AVG
来从低于平均值的所有值中过滤表.然后我需要将INSERT
这些过滤结果放入表格中.
以合理的效率执行此类操作的唯一方法似乎是TEMPORARY TABLE
为每个query-postmaster python-thread 创建一个.我只是希望这些TEMPORARY TABLE
s不会被持久化到硬盘驱动器(根本)并且将保留在内存(RAM)中,当然,除非它们没有工作内存.
我想知道TEMPORARY TABLE是否会引发磁盘写入(这会干扰INSERTS,即整个进程缓慢)
有谁知道应该使用PostgreSQL HASH而不是B-TREE的情况,因为在我看来这些东西都是陷阱.它们比B-TREE花费更多的时间来创建或维护(至少10倍),它们也占用更多空间(对于我的一个table.columns,B-TREE占用240 MB,而HASH会占用拿4 GB)我似乎从谷歌搜索中了解到,他们选择的速度不比B-TREE快; 然而HASH最近可能已经优化或谷歌错了.
无论如何,我想要你的家伙的意见和经验.如果这些HASH是邪恶的,人们应该知道.
谢谢
:MySQL的HASH怎么样?
我一直在使用python和RDBMS'(MySQL和PostgreSQL),我注意到我真的不明白如何使用游标.
通常,他的脚本通过客户端DB-API(如psycopg2或MySQLdb)连接到数据库:
connection = psycopg2.connect(host='otherhost', etc)
Run Code Online (Sandbox Code Playgroud)
然后创建一个游标:
cursor = connection.cursor()
Run Code Online (Sandbox Code Playgroud)
然后可以发出查询和命令:
cursor.execute("SELECT * FROM etc")
Run Code Online (Sandbox Code Playgroud)
现在查询的结果在哪里,我想知道?它在服务器上?还是我的客户端上的一点点,我的服务器上的一点点?然后,如果我们需要访问某些结果,我们会获取它们:
rows = cursor.fetchone()
Run Code Online (Sandbox Code Playgroud)
要么
rows = cursor.fetchmany()
Run Code Online (Sandbox Code Playgroud)
现在让我们说,我不检索所有行,并决定执行另一个查询,以前的结果会发生什么?是他们的开销.
此外,我应该为每种形式的命令创建一个游标,并以某种方式不断地将它重用于那些相同的命令; 我头psycopg2可以某种方式优化多次执行但具有不同值的命令,它是如何值得的?
谢谢
我有一堆钥匙,每个钥匙都有一个不可靠的变量.我想随机选择其中一个键,但我希望它不太可能被选中(键,值)而不是不太可能(更可能)的对象.我想知道你是否会有任何建议,最好是我可以使用的现有python模块,否则我需要自己制作.
我检查了随机模块; 它似乎没有提供这个.
我必须为1000个不同的对象集做出数百万次这样的选择,每个对象包含2,455个对象.每个集合将在彼此之间交换对象,因此随机选择器需要是动态的.拥有1000套2,433件物品,即243.3万件物品; 低内存消耗至关重要.由于这些选择不是算法的主要部分,我需要这个过程非常快; CPU时间有限.
谢谢
更新:
好的,我试图明智地考虑你的建议,但时间是如此有限......
我查看了二叉搜索树方法,它看起来风险太大(复杂而复杂).其他建议都类似于ActiveState配方.我拿了它并稍微修改了一下,希望提高效率:
def windex(dict, sum, max):
'''an attempt to make a random.choose() function that makes
weighted choices accepts a dictionary with the item_key and
certainty_value as a pair like:
>>> x = [('one', 20), ('two', 2), ('three', 50)], the
maximum certainty value (max) and the sum of all certainties.'''
n = random.uniform(0, 1)
sum = max*len(list)-sum
for key, certainty in dict.iteritems():
weight = float(max-certainty)/sum
if n < weight:
break
n = n …
Run Code Online (Sandbox Code Playgroud) 我一直在一个包含2.5亿行和3个索引的表上运行UPDATE; 此UPDATE使用另一个包含3000万行的表.现在已经运行了大约36个小时.我想知道如果他们计划花费一百万天来完成它的事情,他们是否有办法找出完成的距离,我会杀了它; 但如果它只需要一两天,我会让它运行.这是命令查询:
UPDATE pagelinks SET pl_to = page_id
FROM page
WHERE
(pl_namespace, pl_title) = (page_namespace, page_title)
AND
page_is_redirect = 0
;
Run Code Online (Sandbox Code Playgroud)
EXPLAIN不是这里的问题,我只提到大表有多个索引,以便在某种程度上证明更新它需要多长时间.但无论如何这里是EXPLAIN:
Merge Join (cost=127710692.21..135714045.43 rows=452882848 width=57)
Merge Cond: (("outer".page_namespace = "inner".pl_namespace) AND ("outer"."?column4?" = "inner"."?column5?"))
-> Sort (cost=3193335.39..3219544.38 rows=10483593 width=41)
Sort Key: page.page_namespace, (page.page_title)::text
-> Seq Scan on page (cost=0.00..439678.01 rows=10483593 width=41)
Filter: (page_is_redirect = 0::numeric)
-> Sort (cost=124517356.82..125285665.74 rows=307323566 width=46)
Sort Key: pagelinks.pl_namespace, (pagelinks.pl_title)::text"
-> Seq Scan on pagelinks (cost=0.00..6169460.66 rows=307323566 width=46)
Run Code Online (Sandbox Code Playgroud)
现在我还发送了一个并行查询命令,以便DROP一个pagelinks的索引; 当然它正在等待UPDATE完成(但我觉得无论如何都要尝试它!).因此,我无法从页面链接中 …
我想知道当你是你自己的老板时,你们实际上是如何开发大型应用程序的。对于我自己,我一直在努力学习耐心和希望的必要性。我一直致力于实现一个应用程序(以一系列链接到数据库的脚本的形式),该应用程序使用 Wikilinks 知识和文章文本/内容的组合来聚类 Wikipedia 文章。我已经做了两年了;还没有结果。
由于算法的本质(伪伪代码、理论算法)或形式(脚本、线程、数据库表、实用算法)发生变化,我似乎无法获得任何结果,因为我正在不断重新设计我的脚本和数据库. 基本上,我发现自己不断从我在实施过程中发现的错误中学习;魔鬼在细节中,答案似乎也是如此。
无论如何,每次我重新设计脚本或表格或其他东西时,我都需要废弃所有文档和脚本。我现在可以毫无畏惧地做到这一点,但这让我讨厌编程(我讨厌细节)。
我觉得重新设计是要走的路,因为我是长期思考的,我希望快速学习,但我想知道你们是否有类似的编程经验,或者你们是否真的不需要或选择有更好的脚本出来最后一个(像凤凰一样)的死亡。
对我来说最难的部分是抓取我的文档,因为我花更多的时间记录而不是编码;我使用文档作为讨论问题和考虑解决方案的手段;我用它来制定可实施的解决方案。如果不是我,我不介意刮它,但我总是像下周发布一样写它,因为我在开发剧本的同时也在寻求发展自己;我也像参与本网站的人一样,尝试与他人分享我的知识或智慧。
无论如何,这两个月我一直在全速发展,重新设计了无数的文章、脚本、表格等;我的耐心正在耗尽,因为我寻求结果。
您想分享任何策略,任何帮助,任何经验或轶事?
我目前正在清理一个包含2个索引和2.5亿个活动行以及大约尽可能多的死行(或更多)的表.我从我的客户端计算机(笔记本电脑)向我的服务器发出了命令VACCUM FULL ANALYZE.它在过去3-4天左右开展业务; 我想知道它是否会很快结束,因为我还有很多工作要做!
该服务器具有四码Xeon 2.66 GHz处理器,12 GB或RAM以及RAID控制器,该控制器连接到RAID 1配置中的2 x 10K rpm 146 GB SAS HD; 它正在运行Suse Linux.我想知道...
现在,首先VACUUM postmaster流程似乎只使用一个核心.其次,我没有看到对I/O空闲时间比率的非常高的I/O写入.第三,从调用开始procinfo
,我可以推断VACUUM进程花费大部分时间(88%)等待I/0.
那么为什么不通过线程使用更多内核来使RAID控制器过载(获得高I/O写入空闲比率)?如果I/O负载不高,为什么还在等待I/O?为什么手指上的所有这些功率/资源都不会更快?在我看来,VACUUM可以而且应该是多线程的,特别是如果它在一个巨大的桌子上工作,它是唯一一个工作!
另外,他们是一种配置postgresql.conf以让它多线程化这样的VACUUM的方法吗?我可以杀死它并仍然可以从部分清理中获益吗?我需要在那张桌子上工作.
[我正在使用PostgreSQL 8.1]
谢谢了
我一直在使用PostgreSQL,玩维基百科的数百万个超链接等等,已经有2年了.我要么直接通过发送SQL命令来做我的事情,要么我在python中编写客户端脚本来管理一百万个查询,这时无法有效地(高效地)有效地完成.
我会在我的32位笔记本电脑上运行我的python脚本并让它与运行PostgreSQL的6000美元64位服务器通信; 因此,我将有额外的2.10 Ghz,3 GB的RAM,psyco和多线程SQL查询管理器.
我现在意识到现在是我升级的时候了.我需要使用过程语言(PL)学习服务器端脚本; 我真的需要减少网络流量及其固有的序列化开销.
现在,我真的不想研究所有的PL.知道我已经知道了python,并且我正在寻找努力和语言效率之间的手段,你们想知道我应该安装,学习和使用什么PL,为什么以及如何?
我花了大约 5 个小时左右的时间尝试让 TF 2.0 keras API 与 tf.lookup API 一起工作。我的训练脚本还使用 DataBricks 和mlflow.keras
. MLFlow 要求模型被序列化,我认为这就是给我带来问题的原因。问题是:如何将 tf.lookup 表与 TensorFlow 2.0 keras 模型 API 和 MLFlow 结合使用。
当我尝试直接将功能性 Keras API 与 table.lookup 一起使用时,我遇到了 keras 序列化问题:
table = tf.lookup.StaticVocabularyTable(tf.lookup.TextFileInitializer(vocab_path, tf.string, 0, tf.int64, 1, delimiter=","), 1)
categorical_indices = table.lookup(categorical_input)
Run Code Online (Sandbox Code Playgroud)
将上述调用包装在一层中tf.keras.layers.Lambda
没有帮助。我收到与资源句柄或缺少tf
变量相关的错误...
我正在尝试执行此SQL命令:
SELECT page.page_namespace, pagelinks.pl_namespace, COUNT(*)
FROM page, pagelinks
WHERE
(page.page_namespace <=3 OR page.page_namespace = 12
OR page.page_namespace = 13
)
AND
(pagelinks.pl_namespace <=3 OR pagelinks.pl_namespace = 12
OR pagelinks.pl_namespace = 13
)
AND
(page.page_is_redirect = 0)
AND
pagelinks.pl_from = page.page_id
GROUP BY (page.page_namespace, pagelinks.pl_namespace)
;
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我收到以下错误:
ERROR: could not identify an ordering operator for type record
HINT: Use an explicit ordering operator or modify the query.
********** Error **********
ERROR: could not identify an ordering operator for type record
SQL …
Run Code Online (Sandbox Code Playgroud) postgresql ×6
python ×5
rdbms ×3
sql ×3
database ×2
lua ×2
performance ×2
algorithm ×1
cursors ×1
distribution ×1
indexing ×1
keras ×1
latex ×1
optimization ×1
pdf ×1
probability ×1
psycopg2 ×1
random ×1
scipy ×1
sql-update ×1
temp-tables ×1
tensorflow ×1
torch ×1
vacuum ×1
wikipedia ×1