我有几个事件的日志文件(每行一个事件).日志可能会重叠.日志是在可能的多个时区的不同客户端计算机上生成的(但我假设我知道时区).每个事件都有一个标准化为公共时间的时间戳(通过使用适合于日志文件的时区实例化每个日志解析器日历实例,然后使用getTimeInMillis获取UTC时间).日志已按时间戳排序.多个事件可以同时发生,但它们绝不是平等的事件.
这些文件可能相对较大,如单个日志中的500000个事件或更多,因此将日志的全部内容读入简单的Event []是不可行的.
我正在尝试做的是将每个日志中的事件合并到一个日志中.它有点像mergesort任务,但每个日志已经排序,我只需将它们组合在一起.第二个组件是可以在每个单独的日志文件中看到相同的事件,我想在文件输出日志中"删除重复事件".
这可以"就地"完成,例如,顺序处理每个日志文件的一些小缓冲区吗?我不能简单地将所有文件读入Event [],对列表进行排序,然后删除重复项,但到目前为止,我的有限编程功能只能让我将其视为解决方案.当我同时从每个日志中读取事件时,是否有一些更复杂的方法可用于执行此操作?
有人可以告诉我是否可以使用index,openCursor和keyRange对indexeddb对象存储执行不区分大小写的搜索....
我可以做区分大小写并设法使用toUpperCase函数实现一些东西但是有很多不同的变体它是不可行的......
任何帮助都欢迎... Thanx ...尝试的例子:
var transaction = db.transaction("products", IDBTransaction.READ_ONLY);
var store = transaction.objectStore("products");
var descIndex = store.index('Index1');
var boundKeyRangeUpper = IDBKeyRange.bound(request.term.toUpperCase(), (request.term.toUpperCase()+'Z'));
descIndex.openCursor(boundKeyRangeUpper).onsuccess = function (e)
Run Code Online (Sandbox Code Playgroud)
更新
这是我最终实现的:四个范围覆盖和可能性,即FA,fA,Fa,fa ......这只在第一个字母上完成,即'F'
var boundKeyRangeUpper = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'Z');
var boundKeyRangeUpper2 = IDBKeyRange.bound(term.toUpperCase(), term.toUpperCase()+'z');
var boundKeyRangeLower = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'z');
var boundKeyRangeLower2 = IDBKeyRange.bound(term.toLowerCase(), term.toLowerCase()+'Z');
上面的搜索结果存储在另一个objectStore中,但是它们的描述为大写,因此FISH,FRUIT,FRESH SALAD ......现在如果在F之后按下一个字母,例如'r',搜索将会查看这个新的对象存储库,其中包含所有内容是大写的......到目前为止,这不是一个理想的解决方案,但它的工作原理很快就满足了我的需求......也许我们最终会得到不区分大小写的搜索,也许不会......
我有一个带有输入框的表单,我想用 IndexedDb objectStore 中的值自动完成它,这适用于两个定位过度的输入框。我在一个简单的数组上工作得很好,但我想让它与来自 objectStore 的值一起工作。为此,我必须将可用的值从事务中取出,以便我可以在自动完成功能中遍历它们。
1- 如何将事务的结果放入其余代码中可用的对象中?
2- 我的循环语法是否可以“results.value.name.length”(名称是我的 objectStore 索引)来处理结果对象?
通过游标获取 IndexedDb 对象:
var results = [];
var openDbRequest = indexedDB.open(DB_NAME);
openDbRequest.onsuccess = function (e) {
var db = e.target.result;
var tran2 = db.transaction("store");
tran2.objectStore("store").openCursor().onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
results = cursor;
cursor.continue();
};
};
};
Run Code Online (Sandbox Code Playgroud)
自动完成功能
var auto = "";
var auto_disp = "";
function getName(results) {
var input = document.forms['myform'].name.value;
var len = input.length;
if (input.length) {
for (i=0; i<results.value.name.length; …Run Code Online (Sandbox Code Playgroud) 给定一个indexeddb数据库,其中一个声明的objectstore为:
var objectStore = thisDb.createObjectStore("table", {keyPath: "id", autoIncrement: true})
Run Code Online (Sandbox Code Playgroud)
当我使用添加请求添加新项目时:
var resp = objectStore.add(row)
Run Code Online (Sandbox Code Playgroud)
如何在onsuccess函数中获取此添加项的新ID?
resp.onsuccess = function(e) { /* code to get the id of the added item */}
Run Code Online (Sandbox Code Playgroud) 我真的很喜欢这种非常简单的 indexeddb 使用,但我试图弄清楚如何进行更新。
我已经看到 .put 应该适用于这个,但是当我尝试这个时,它只会覆盖 id 12345 的所有数据。我错过了什么?
这是我在下面使用的:
store.put({id: 12345, name: {first: "John", last: "Doe"}, 年龄: 42});
store.put({id: 12345, name: {first: "somethingelse"}, 年龄: 42});
完整代码:
var indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB || window.shimIndexedDB;
// Open (or create) the database
var open = indexedDB.open("MyDatabase", 1);
// Create the schema
open.onupgradeneeded = function() {
var db = open.result;
var store = db.createObjectStore("MyObjectStore", {keyPath: "id"});
var index = store.createIndex("NameIndex", ["name.last", "name.first"]);
};
open.onsuccess = function() {
// …Run Code Online (Sandbox Code Playgroud) 我在另一个关于检测阻止和解除阻塞事件的问题中被告知"阻止打开(或删除)未被取消,只是...被阻止.一旦解锁,打开(或删除)将继续."
我想知道应用程序应该如何响应被阻止的事件,如果有可能成功事件之后的路径仍然会发生,最终.
如果我希望我的应用快速响应并遇到阻止事件,我应该取消成功路径吗?通过路径,我指的是在成功打开数据库的情况下执行的一系列语句和函数调用和继续.
以前我认为被阻止的事件阻止了成功路径的继续.我已经编写了我的应用程序来处理阻塞事件,类似于错误,这意味着操作无法继续,并且应该报告错误,然后执行其他操作或返回空闲状态.
对我来说问题是,如果成功事件最终可以继续,那么这意味着我正在分叉,错误路径和成功路径都将进行评估,并可能导致一些不需要的行为.
或者我的初步理解是正确的,我不需要担心取消成功时发生的事情,因为如果onblocked触发,那么我可以安全地推断onsuccess不会.
做类似下面这样的事情真的很难看,但这是我想到的唯一一个避免问题的方法.
var r indexedDB.open(...);
var wasPreviouslyBlocked = false;
r.onsuccess = function() {
// Cancel the success if previously blocked
if(wasPreviouslyBlocked) {
return;
}
// Proceed as normal
doNextThing();
};
r.onblocked = function() {
wasPreviouslyBlocked = true;
};
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来应对这种情况?
我想将我的API数据存储在浏览器的indexedDB中。我本想尝试本地存储,但它的限制为 5MB,但我的 JSON 数据超过 7MB。我想保存在indexedDB中以便更快地访问。我想以 JSON 格式保存整个数据,但不知道如何设置索引数据库的方案。从数据库中取出的数据是testData
const db =new Dexie("ReactDexie");
db.version(1).stores({
test:"++id title " //Dont Know how to set scheme here for my json object
})
db.open().catch((err)=>{
console.log(err.stack || err)
})
var transaction = db.transaction([testData], IDBTransaction.READ_WRITE);
var objstore = transaction.objectStore(testData);
for (var i = 0; i < testData.length; i++) {
objstore.put(testData[i]);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试设置indexeddb存储以用于chrome.但是Uncaught TypeError当我尝试建立一个READ_WRITE交易时,我得到了一个.
我无法找到关于使用webkitIDB的最新信息.所以我在这里基本上是盲目的.我做错了什么想法?我错过了吗?
建立:
function OfflineStorage() {
this.saveJSONString = __bind(this.saveJSONString, this);
var request,
_this = this;
this.dbkeyRange = window.webkitIDBKeyRange;
this.dbTransaction = window.webkitIDBTransaction;
this.db = window.webkitIndexedDB;
request = this.db.open("lucidFrog");
request.onsuccess = function(e) {
_this.db = e.target.result;
return _this.setupDB(); //setupDB() ensures the objectStores have been created.
};
}
Run Code Online (Sandbox Code Playgroud)
保存功能:
OfflineStorage.prototype.saveJSONString = function(objectStore, json_string, obj_id) {
var request, store, transaction;
//PROBLEM AREA, gives "Uncaught TypeError: Type error"
transaction = this.db.transaction([objectStore], this.dbTransaction.READ_WRITE, 0);
////////////////////
store = transaction.objectStore(objectStore);
request = store.put({ …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用IndexedDB在本地存储一些数据.下面我有一个简单的例子,我试图让onupgradeneeded事件触发
<html>
<head>
<script>
var indexedDB = window.indexedDB || window.webkitIndexedDB
||window.mozIndexedDB||window.msIndexedDB;
var request = indexedDB.open("mydb",2),
customerData=[
{ssn:"444-44-4444",name:"Bill",age:35,email:"bill@company.com"},
{ssn:"555-55-5555",name:"Donna",age:32,email:"donna@home.org"}
];
request.onerror = function(event){
alert("ERROR") ;
};
request.onupgradeneeded = function(event) {
alert("UPGRADE NEEDED") ;
var objectStore = db.createObjectStore("customers",{keyPath:"ssn"});
objectStore.createIndex("name","name",{unique:false});
objectStore.createIndex("email","email",{unique:true});
for(var i in customerData){
objectStore.add(customerData[i]);
}
} ;
request.onsuccess = function(e) {
alert("SUCCESS") ;
} ;
</script>
</head>
</html>
Run Code Online (Sandbox Code Playgroud)
我试图更改版本号,但无论我尝试onupgradeneeded,都不会被调用/触发.有什么建议吗?
欢呼卢卡