@dagorym: Ай, человек. Я зависал на это как польза, "я скучаю, что я могу обдумать" загадку. Я придумал свой оперативный код перемещения, но добрался здесь для нахождения Вашего в значительной степени идентичным моему... ах, хорошо. Здесь это находится в Ruby.
require 'pp'
n = 10
a = []
n.times { a << (1..n).to_a }
pp a
0.upto(n/2-1) do |i|
i.upto(n-i-2) do |j|
tmp = a[i][j]
a[i][j] = a[n-j-1][i]
a[n-j-1][i] = a[n-i-1][n-j-1]
a[n-i-1][n-j-1] = a[j][n-i-1]
a[j][n-i-1] = tmp
end
end
pp a
Мне повезло с решением Tokyo Cabinet / pytc. Это очень быстро (немного быстрее, чем использование модуля полки с использованием anydbm в моей реализации) как для чтения, так и для записи (хотя я тоже читаю гораздо больше). Проблемой для меня была спартанская документация по привязкам Python, но есть достаточно примеров кода, чтобы понять, как делать то, что вам нужно. Кроме того, tokyo cabin довольно легко установить (как и привязки python), не требует сервера (как вы упомянули) и, кажется, активно поддерживается (стабильно, но больше не находится в активной разработке). Вы можете открывать файлы в режиме только для чтения, разрешая одновременный доступ, или в режиме чтения / записи, не позволяя другим процессам обращаться к базе данных.
Летом я рассматривал различные варианты, и тогда я получил следующий совет: попробуйте различные варианты и посмотрите, что лучше всего подходит для вас. Было бы неплохо, если бы был просто «лучший» вариант, но все ищут немного разные функции и готовы идти на разные компромиссы. Вы знаете лучше всех.
(Тем не менее, было бы полезно для других, если бы вы рассказали, что в итоге сработало для вас лучше всего, и почему вы выбрали это решение среди других!)
И тогда я получил следующий совет: попробуйте разные варианты и посмотрите, что лучше всего подходит для вас. Было бы неплохо, если бы был просто «лучший» вариант, но каждый ищет немного разные функции и готов идти на разные компромиссы. Вы знаете лучше всех.(Тем не менее, было бы полезно для других, если бы вы рассказали, что в итоге сработало для вас лучше всего и почему вы выбрали это решение среди других!)
Тогда я получил следующий совет: попробуйте разные варианты и посмотрите, что лучше всего подходит для вас. Было бы неплохо, если бы был просто «лучший» вариант, но каждый ищет немного разные функции и готов идти на разные компромиссы. Вы знаете лучше всех.(Тем не менее, было бы полезно для других, если бы вы рассказали, что в итоге сработало для вас лучше всего и почему вы выбрали это решение среди других!)
Я использовал bsddb.hashlib () с Python, он работал довольно хорошо.
Еще одно предложение - TDB (часть проекта Samba). Я использовал его через модуль tdb , но не могу сказать, что проверял его надежность на сбоях; проекты, в которых я его использовал, не имели таких требований, и я не могу найти соответствующую документацию.
cdb может обрабатывать любую базу данных размером до 4 ГБ, что делает ее слишком малой для имеющихся 20 ГБ.
В моем запросе на кроссплатформенную базу данных в стиле ISAM (аналогично) я также получил предложения для встроенной версии Firebird и GLib .
Riak работает в Linux и позволяет динамически добавлять узлы