当有大量文件(> 100,000)时,我正试图找出找到特定目录中文件数量的最佳方法.
当存在那么多文件时,执行"ls | wc -l"需要相当长的时间才能执行.我相信这是因为它返回了所有文件的名称.我试图占用尽可能少的磁盘IO.
我已经尝试了一些shell和Perl脚本无济于事.有任何想法吗?
我在Python中实现了一个后缀树来进行全文搜索,并且它的工作非常好.但是有一个问题:索引文本可能非常大,因此我们无法将整个结构放在RAM中.
图像:单词的后缀树BANANAS
(在我的场景中,想象一棵大100000倍的树).
所以,研究一下它我找到了一个pickle
模块,一个很好的Python模块,用于从文件中"加载"和"转储"对象,然后猜猜是什么?它与我的数据结构完美配合.
因此,长话短说:在磁盘上存储和检索此结构的最佳策略是什么?我的意思是,一个解决方案可能是将每个节点存储在一个文件中,并在需要时从磁盘加载它,但这不是最好的想法(太多的磁盘访问).
脚注:虽然我已将此问题标记为python,但编程语言并不是问题的重要部分,磁盘存储/检索策略确实是重点.
我可以从多个线程(在典型的PC上)同时写入同一文件的不同部分吗?我的意思是只有一个磁头,所以写入只能以某种顺序执行,即不是并行执行,对吧?
编辑:
我正在编写一个对大型二进制文件进行排序的程序,但大部分时间仍然花在磁盘I/O上,所以我只是想知道通过并行执行I/O可以获得额外的速度.
我一直用a FileWriter
来用Java写文件到文件.显然你也可以使用一个BufferedOutputStream
.在仔细阅读了两个javadoc之后,我似乎无法分辨哪个是更快/更有效.
所以我问:这两种文件I/O方法之间是否存在性能差异(即使是最小的)?如果是这样,它们是什么?为什么?如果没有,为什么它们实际上是一样的?
是否存在一个优先于另一个的情况?提前致谢!
我的MySQL应用程序遇到性能降低运行时的一些UPDATE
,INSERT
和DELETE
查询.在这个问题中,我只讨论一个特定问题UPDATE
,因为它足以证明问题:
UPDATE projects SET ring = 5 WHERE id = 1
Run Code Online (Sandbox Code Playgroud)
这UPDATE
通常足够快,大约0.2ms,但是时不时(足以成为一个问题)需要几秒钟.这是日志的摘录(见第4行):
~ (0.000282) UPDATE `projects` SET `ring` = 5 WHERE `id` = 1
~ (0.000214) UPDATE `projects` SET `ring` = 6 WHERE `id` = 1
~ (0.000238) UPDATE `projects` SET `ring` = 7 WHERE `id` = 1
~ (3.986502) UPDATE `projects` SET `ring` = 8 WHERE `id` = 1
~ (0.000186) UPDATE `projects` SET `ring` …
Run Code Online (Sandbox Code Playgroud) 背景:
我正在开发一个与数据库相关的程序,我需要按顺序将脏元数据从内存刷新到磁盘./ dev/sda1是volumn格式,因此将逐块访问/ dev/sda1上的数据,如果按顺序访问,则块在物理上相邻.我使用直接I/O,因此I/O将绕过文件系统的缓存机制并直接访问磁盘上的块.
问题:
在打开/ dev/sda1之后,我将读取一个块,更新块并将块重新写回/ dev/sda1开头的相同偏移量.
代码如下 -
//block_size = 256KB
int file = open("/dev/sda1", O_RDWR|O_LARGEFILE|O_DIRECT);
for(int i=0; i<N; i++) {
pread(file, buffer, block_size, i*block_size);
// Update the buffer
pwrite(file, buffer, block_size, i*block_size);
}
Run Code Online (Sandbox Code Playgroud)
我发现如果我不做pwrite,读取吞吐量是125 MB/s.
如果我执行pwrite,读取吞吐量将为21 MB/s,写入吞吐量为169 MB/s.
如果我在pwrite之后pread,写吞吐量是115 MB/s,读吞吐量是208 MB/s.
我也试过read()/ write()和aio_read()/ aio_write(),但问题仍然存在.我不知道为什么在读取文件的相同位置后写入会使读取吞吐量如此之低.
如果一次访问更多的块,就像这样
pread(file, buffer, num_blocks * block_size, i*block_size);
Run Code Online (Sandbox Code Playgroud)
问题会缓解,请参阅图表.
我是一名刚开始使用python的学生,我的任务是创建一个关系数据库管理系统。我想我走的很远,但是我似乎撞墙了。这是我的代码:
import csv
import sqlite3
conn = sqlite3.connect('unfccc.db')
c = conn.cursor()
c.execute('''CREATE TABLE unfccc (
Country TEXT,
CodeCountryFormat TEXT,
NamePollutant TEXT,
NameYearSector TEXT,
NameParent TEXT,
Sector TEXT,
CodeSector TEXT,
CNUEDSPD TEXT
)''')
def insert_row(Country, CodeCountryFormat, NamePollutant, NameYearSector, NameParent, Sector, CodeSector, CNUEDSPD):
c.execute("INSERT INTO unfccc VALUES (?, ?, ?, ?, ?, ?, ?, ?)", (Country, CodeCountryFormat, NamePollutant, NameYearSector, NameParent, Sector, CodeSector, CNUEDSPD))
conn.commit()
with open('UNFCCC_v20.csv') as csvfile:
readCSV = csv.reader(csvfile, delimiter='\t')
counter = 0
for row in readCSV:
insert_row(row[0], row[1], row[2], …
Run Code Online (Sandbox Code Playgroud) 我在运行命令时获得了以下 redis 统计信息docker stats
。
我想了解 NET I/O 和 BLOCK I/O。我读了一些文档,他们说 BLOCK I/O 与磁盘操作相关。但我不确定这个 NET I/O 是什么。任何人都可以帮助我了解这些吗?
我在 Android 应用程序上调用函数getExternalCacheDir()
,这导致某些拥有以下设备(HUAWEI P30 lite、Galaxy A40、Xperia XZ3)的 Android 10 用户出现 ANR。
我的 ANR 的堆栈跟踪如下
The "main" (tid=1) thread is performing disk I/O.
"main" prio=5 tid=1 Native
| group="main" sCount=1 dsCount=0 flags=1 obj=0x72dfcb58 self=0x73e23a5000
| sysTid=12158 nice=0 cgrp=default sched=0/0 handle=0x73e3913ee8
| state=D schedstat=( 378582885 304333911 539 ) utm=23 stm=14 core=7 HZ=100
| stack=0x7fc28de000-0x7fc28e0000 stackSize=8192KB
| held mutexes=
at libcore.io.Linux.access (Native method)
at libcore.io.ForwardingOs.access (ForwardingOs.java:73)
at libcore.io.BlockGuardOs.access (BlockGuardOs.java:71)
at libcore.io.ForwardingOs.access (ForwardingOs.java:73)
at android.app.ActivityThread$AndroidOs.access (ActivityThread.java:7816)
at java.io.UnixFileSystem.checkAccess (UnixFileSystem.java:281)
at java.io.File.exists (File.java:815) …
Run Code Online (Sandbox Code Playgroud) disk-io ×10
java ×3
c ×2
performance ×2
python ×2
android ×1
benchmarking ×1
caching ×1
caliper ×1
docker ×1
file-io ×1
filewriter ×1
io ×1
linux ×1
mysql ×1
networking ×1
ram ×1
read-write ×1
shell ×1
sqlite ×1
throughput ×1
vps ×1