我在java中寻找一个持久的哈希结构,一个简单的键值存储,其中key是唯一的字符串,值是int.每次将现有密钥添加到商店时,密钥的值都会递增.
我需要这个很大 - 可能是500m - 10n键.我一直在评估tokyo-cabinet http://fallabs.com/tokyocabinet/javadoc/但不确定它的扩展程度 - 随着哈希的增长,插入时间似乎越来越长.
关于什么可能合适的任何想法?
谢谢
编辑:为了减少磁盘I/O,我将在内存中的HashMap中缓存数据,然后在缓存增长到一定大小时一次性更新持久性哈希.
编辑2:持久性的原因之一是我有限制的RAM,4GB,所以我无法在内存中加入大量的结构.
我在这里找到了所有答案并尝试了所有解决方案,但我的共享首选项仍然没有持久性.
这是我的代码:
public static void setActivated(boolean activated) {
SharedPreferences sp = Utils.getContext().getSharedPreferences(
USER_PREFS, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putBoolean(ASD, activated);
editor.commit();
}
public static boolean isActivated() {
SharedPreferences sp = Utils.getContext().getSharedPreferences(USER_PREFS, Context.MODE_PRIVATE);
return sp.getBoolean(ASD, true);
}
Run Code Online (Sandbox Code Playgroud)
我也试过了:
editor.clear();
editor.put ..
editor.commit();
Run Code Online (Sandbox Code Playgroud)
我也试过了
editor.apply();
Run Code Online (Sandbox Code Playgroud)
我甚至尝试了.apply()和.commit()并没有运气.
另一个想法是尝试使用不同的模式:
...getSharedPreferences(USER_PREFS, Context.MODE_MULTI_PROCESS);
Run Code Online (Sandbox Code Playgroud)
问题是保存的值不是持久的.如果我关闭应用程序然后重新打开它,则值全部错误.
有没有人有任何想法?我还要提到问题只出现在某些设备上,例如HTC One S,三星Galaxy S3(我在不同的S3上测试过,它运行得很好).
编辑:我在按钮单击监听器上调用保存,并在加载片段时调用isActivated(在onViewCreated()之后).
谢谢!
如何在Persistent中存储枚举?
假设您有数据State = Ready | 尚未准备好 错误
如何将其存储在Persistent数据库中?
在学校项目中,我正在运行一些通过控制台窗口输入并从那里运行的javascript.此脚本操纵网页并将结果输出到控制台.
问题:以持久的方式保存/保存这些结果,这些结果不会因浏览器关闭,脚本故障/页面重新加载而消失,或者如果可能,PC崩溃.
我想过使用Log4js或jStorage(jQuery Storage)这样的框架,但由于这不是我操作的网站,我无法在页面中添加代码或标记.
有没有办法做到这一点?
注意:将结果记录到控制台并不重要,我可以将它们发送到某处或者使用它们执行其他操作,如果这样可以更容易记录.
谢谢.
观察结果:
我的Web应用程序正在JBoss中运行。
由于图像等原因,每一次用户单击都会生成> 5个HTTP请求。
在服务器上运行netstat会显示为每个单个HTTP请求打开了一个新的TCP连接(基本上,我正在查看来自端口80上客户端IP的TCP连接总数)。
事实:
JBoss HTTP协议设置为1.1。
我已经检查过FF,IE9和Chrome-所有浏览器都执行相同的操作。
我有两个测试环境-一个在Windows7上运行,另一个在CentOS上运行。我在两者中看到相同的行为。
我要完成的工作
在这一点上,我不确定该问题应该附加什么代码,配置详细信息或日志,但是如果您让我知道,我会提供。任何帮助都将受到赞赏。
ps从标题来看,该线程似乎很有希望,TCP连接不会通过HttpURLConnection再次用于HTTP请求,但它主要处理客户端。
我有一个想要在 Google Chrome 控制台中使用的脚本。但这个脚本将重新加载页面。有点像这样:
setInterval(function(){location.reload();},3000);
Run Code Online (Sandbox Code Playgroud)
问题是,一旦重新加载,脚本就会停止并清除控制台。我尝试了“保留导航日志”选项:它保留日志,但脚本在重新加载后不会重新启动。
我应该怎么做 ?谢谢 :)
我试图使用vim 7.4.9持久撤消
在我的vimrc中,我有:
set undodir=/home/myname/.vim/undo//
set undofile
set undolevels=1000
set undoreload=10000
Run Code Online (Sandbox Code Playgroud)
当然/home/myname/.vim/undo目录存在.
我用vim打开了一些文件并进行了一些更改.
我在/home/myname/.vim/undo/中看到了undofiles:
$ ll /home/myname/.vim/undo/
total 23K
-rw-r--r-- 1 hpcpcollab hpcpcollab 523 18 sept. 11:23 %home%myname%foo
-rw-r--r-- 1 hpcpcollab hpcpcollab 14K 18 sept. 11:03 %home%myname%bar
-rw-r--r-- 1 hpcpcollab hpcpcollab 2,2K 18 sept. 11:52 %home%myname%test
Run Code Online (Sandbox Code Playgroud)
但是,当我关闭这些文件时,重新打开它们,并按"u"以撤消,vim回复:"已经在最早的更改".
我错过了什么?
谢谢
朱利安
在正常Handler工作流中很容易运行数据库操作,因为该runDB功能可用于将SqlPersistM操作转换为操作Handler.
但是没有这种方法可以SqlPersistM直接转换为IO使用默认的应用程序设置.查看Foundation.hs应用程序脚手架中定义的内容,有以下实例
instance YesodPersist App where
type YesodPersistBackend App = SqlBackend
runDB action = do
master <- getYesod
runSqlPool action $ appConnPool master
instance YesodPersistRunner App where
getDBRunner = defaultGetDBRunner appConnPool
Run Code Online (Sandbox Code Playgroud)
它基本上runSqlPool与应用程序的配置一起使用,但我没有看到如何利用它来访问REPL中的配置表单的简单方法.
TL; DR:我正在寻找的只是能够runDB $ selectList [...] [...]在我的Yesod应用程序中从cabal repl中执行某些操作,而无需复制Yesod脚手架开箱即用的设置.
我有一个函数返回一个data.table附加了各种有用的用户定义属性.但是,我注意到,当操纵data.table时,属性会消失.
library(data.table)
my_dt <- data.table(col1 = rnorm(20), col2 = letters[1:20])
# store some user attribute
attr(my_dt, 'title') <- 'This is my data.table'
# now it's there
attributes(my_dt)
# but here it's gone
attributes(my_dt[order(col1)])
Run Code Online (Sandbox Code Playgroud)
有没有办法让data.table'persist'的属性适用于上述情况(除了将它们存储在一个单独的对象中)?
似乎属性确实存在于常规 data.frames
my_df <- data.frame(col1 = rnorm(20), col2 = letters[1:20])
# store some user attribute
attr(my_df, 'title') <- 'This is my data.frame'
# there it is
attributes(my_df)
# still there
attributes(my_df[order(my_df$col1), ])
Run Code Online (Sandbox Code Playgroud) 我正在制作一个带有登录系统的网站,我希望用户即使在浏览器关闭后也能够保持登录状态。仅当用户注销时才销毁会话。我在网上搜索了解决方案,并发现了使用connect-session-sequelize 的建议。我阅读了文档并尽最大努力使代码正常工作,但我在这方面缺乏经验,这成为了障碍。
问题:
我的代码没有给出服务器重新启动后保持用户登录的结果。我的代码是:
var express = require('express');
var app = express();
var cookieParser = require('cookie-parser');
var session = require('express-session');
var SequelizeStore = require('connect-session-sequelize')(session.Store);
var pug = require('pug');
var bodyParser = require('body-parser');
var bcrypt = require('bcrypt');
app.use(bodyParser.urlencoded({
extended: true
}));
app.use(express.static('public'));
app.use(cookieParser());
app.set('views', './views');
app.set('view engine', 'pug');
var Sequelize = require('sequelize');
var db = new Sequelize('postgres://'+ process.env.POSTGRES_USER + ':' +
process.env.POSTGRES_PASSWORD + '@localhost/terranova', {
host: 'localhost',
dialect: 'postgres',
storage: './session.postgres',
define: {
timestamps: true
}
});
var sessionStore …Run Code Online (Sandbox Code Playgroud) persistent ×10
console ×2
haskell ×2
javascript ×2
yesod ×2
android ×1
attributes ×1
data.table ×1
express ×1
hash ×1
http ×1
java ×1
jboss ×1
logging ×1
node.js ×1
postgresql ×1
preferences ×1
r ×1
save ×1
session ×1
shared ×1
tcp ×1
undo ×1
user-defined ×1
vim ×1