Загадка SQLite/STDIN, Характерная для AIX

Не может быть такого универсального программного обеспечения, любят существует программное обеспечение дефрагментации для не жесткий диск SSD.

Причина состоит в том, что на не Жестком диске SSD, данные хранятся физически на известном месте. Путем знания адреса LBA данных, инструмент дефрагментации теперь, где данные находятся физически на жестком диске и могут переместить его, где он хочет. (это почти верно, но не во всем случае),

На SSD данные также хранятся в адресе LBA (это, как ATA/SATA работает). Но, в то время как традиционный жесткий диск будет (в большей части случая), хранят адрес LBA 1 в начале диска, сопровождаемого адресом 2, 3, 4..., N; SSD не сохранит адрес линейно, потому что хранение линейно было бы очень медленным, если Вы пишете в адресе 1 затем, позже, в адресе 2, потому что SSD должен будет переписать данные, хранившие в адресе 1 (это означает читать его, хранить его в кэше, стирание адресуют 1 к N (ssd должен записать, что целый блок N обращается каждый раз, когда Вы пишете данные)), запишите адрес 1 и 2. Это медленно). Это, почему SSD сохранит адрес 2 'далеко' (в пространстве памяти) от адреса 1. Это делает запись быстрее, но сделает диск медленнее, когда весь блок будет использоваться.

Так, инструмент не может знать, как данные хранятся на SSD и не могут решить, как сделать что-то как 'дефрагментация'. Единственный способ сделать это должно запустить программу в контроллерах жесткого диска, использовать инструмент, который может попросить, чтобы SSD сказал ему, как данные хранятся и говорят ему, как переместиться затем (использующий адрес внутренней памяти и не адрес LBA) (нет никакой стандартной команды ATA, чтобы сделать это, сделайте это означало бы 1 инструмент на поставщиков SSD. Я даже не знаю, могло ли быть возможно использовать такую собственную команду по протоколу ATA. (ДВОРНИК, может быть такой инструмент)), или используйте известную команду TRIM.

Через некоторое время Вы добираетесь, весь блок адреса N только с немногими обращаются используемый (потому что Вы удалили вещи и т.д.) и это начинает быть медленным, потому что каждый раз Вы пишете данные, блок должен быть считан, стерт, записать. Это, почему необходимо ОБРЕЗАТЬ для получения большинства блоков, полных данных и новых пустых блоков.

PS: Только, чтобы быть ясным, это - очень упрощенное объяснение. Также в большей части случая Вы не только запишете 1 адрес LBA данных, но многих (потому что файл является большим), так, чтобы Вы записали, что X блоков N обращаются, но получают блоки Xth, не полные зарегистрированный.

0
задан 9 June 2010 в 17:13
3 ответа

Если Вы на самом деле используете Bash и замену процесса поддержек AIX (которому я верю, зависимый платформы), это могло бы работать на Вас:

Демонстрация:

cat <(echo 'test')

Ваша команда:

sqlite3 test.db '.import '<(echo test)' test'
0
ответ дан 5 December 2019 в 17:40
  • 1
    тест эха укусил, к сожалению, isn' t другой инструмент командной строки Unix - it' s некоторая случайная программа, которая связывается через stdin/stdout, но имеет замысловатую платформу выполнения это wouldn' t позволяют этому быть названным тем путем, если это имеет смысл. –   9 June 2010 в 16:18
  • 2
    @mikfreedman: Я don' t понимают. Если это можно назвать в конвейере, это можно назвать с помощью замены процесса. Кроме того, в Вашей второй команде в Вашем вопросе, почему использование cat -? Почему не echo 'test' > /tmp/blah? –  Paused until further notice. 9 June 2010 в 16:43
  • 3
    в программе я использую, я могу войти, Unix управляют, чтобы программа записала в, единственное требование является этой программой, может только записать в STDOUT.. таким образом, it' s, достигающий моей произвольной команды через канал, но порядка, должен быть, как я описал. Для ссылки программа, которую я использую, является Infosphere DataStage. –   9 June 2010 в 17:08

На основе ответов выше:

... | sqlite3 test.db 'import '<(cat -)' test'

Я протестировал это в своей системе, и это, кажется, делает то, что Вы хотите.

0
ответ дан 5 December 2019 в 17:40

Если взломы STDIN не работают над той платформой, как насчет того, чтобы использовать именованный канал вместо временного файла? Это вело бы себя с точки зрения этих двух программ как файл, но без фактической записи в и чтения из диска.

0
ответ дан 5 December 2019 в 17:40

Теги

Похожие вопросы