我正在探索IndexedDB Wrapper的各种选项,我遇到了以下几个选项:
但我无法找出哪一个是最好的一个?我想将IndexedDB用于离线HTML5驱动的应用程序以保留本地数据.等待大家的最佳回应!
我想使用Google Chrome的IndexedDB在客户端保留数据.
想法是稍后通过Node.JS访问chrome之外的IndexedDB.背景是在本地跟踪使用行为并将收集的数据存储在客户端上以供以后分析而无需服务器后端的想法.
根据我的理解,indexedDB是作为LevelDB实现的.但是,我不能与任何类似的工具/库的开启性LevelDB 的LevelUp/LevelDown或性LevelDB JSON的.
我总是收到此错误消息:
leveldb-dump-to-json --file test.json --db https_www.reddit.com_0.indexeddb.leveldb
events.js:141
throw er; // Unhandled 'error' event
^ OpenError: Invalid argument: idb_cmp1 does not match existing comparator : leveldb.BytewiseComparator
at /usr/local/lib/node_modules/leveldb- json/node_modules/levelup/lib/levelup.js:114:34 Christians-Air:IndexedDB
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙吗?似乎Chrome实现在某种程度上是特殊/不同的.
我正在写一篇关于Web应用程序离线功能的论文.我的任务是通过Web应用程序显示离线存储的可能性,该应用程序具有服务器端关系数据库和客户端与服务器之间的Ajax/JSON流量.我的第一个实现使用了localStorage的方法,将每个Ajax响应保存为值,并将请求URL作为键.该应用程序工作正常.然而,在下一步中,我希望(即论文要求)使用客户端数据库实现更高级的版本.由于服务器维护关系数据库,因此Web SQL数据库将是直观的选择.但是,正如我们所知,该标准已被弃用,我不想使用未来不确定的技术.因此,我想使用IndexedDB来实现客户端数据库逻辑.不幸的是,在网上阅读了大量材料后,我们仍然不知道该如何处理.
我的任务似乎相当简单: 使用IndexedDB在客户端上实现服务器端数据库,以复制曾经从服务器获取的所有数据.这些问题远远不那么简单:
现在,我有一个概念,我真的害怕开始实施.我考虑过为服务器数据库中的每个表创建一个对象存储,并手动编写不同对象存储中的关系对象.在我的应用程序中,简而言之,管理大学的课程,我有7个对象商店.
我想通过服务器的JSON响应示例演示我的想法(/*这些是注释*/):
{ "course": { /* course object */
"id":1,
"lecturer": { "id":"1", /* lecturer object with many attributes */ },
"semester": { "id":"1", /* semester object with many attributes */ },
/* more references and attributes */
}}
Run Code Online (Sandbox Code Playgroud)
使用IndexedDB存储数据的算法会将应用于对象存储的每个对象存储在适当的对象存储中,并使用对这些对象的引用替换对象.例如,上面的课程对象在对象库"课程"中看起来如下:
{ "course": { /* course object */
"id":1,
"lecturer":
{ "reference": { /* reference to the lecturer in the object store 'lecturer' */
"objectstore":"lecturer",
"id":"1" }
},
"semester":
{ "reference": { …Run Code Online (Sandbox Code Playgroud) 说一张桌子有,名字,身份证,年龄,性别,教育等.ID是关键,表格也是姓名,年龄和性别的索引.我需要所有25岁以上的男学生按名字排序.
这在mySQL中很简单:
SELECT * FROM table WHERE age > 25 AND sex = "M" ORDER BY name
Run Code Online (Sandbox Code Playgroud)
IndexDB允许创建索引并根据该索引对查询进行排序.但它不允许多次查询,如年龄和性别.我发现了一个名为queryIndexedDB(https://github.com/philikon/queryIndexedDB)的小型库,它允许复合查询,但不提供排序结果.
那么有没有办法在使用IndexedDB时进行排序复合查询?
问题是当您在同一个indexeddb中有两个不同的对象库时,主键值似乎在所有商店中"共享".
<body>
<script type="text/javascript">
//prefixes of implementation that we want to test
window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB;
//prefixes of window.IDB objects
window.IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.msIDBTransaction;
window.IDBKeyRange = window.IDBKeyRange || window.webkitIDBKeyRange || window.msIDBKeyRange
if (!window.indexedDB) {
window.alert("Your browser doesn't support a stable version of IndexedDB.")
}
var db;
var request = window.indexedDB.open("newDatabase", 4);
request.onerror = function(event) {
console.log("error: ");
};
request.onsuccess = function(event) {
db = request.result;
console.log("success: "+ db);
};
request.onupgradeneeded = function(event) …Run Code Online (Sandbox Code Playgroud) 我正在编写一个Web应用程序,生成一个用户可以下载的潜在大文本文件,所有处理都在浏览器中完成.到目前为止,我能够以小块的形式读取超过1 GB的文件,处理每个块,逐步生成大量输出文件,并将增长的输出存储在IndexedDB中.我更天真的尝试将所有结果保存在内存中,然后在最后将它们序列化为文件,导致所有浏览器崩溃.
我的问题是双重的:
我可以追加到IndexedDB中的条目(字符串或数组)而不先将整个内容读入内存吗?现在,这个:
task.dbInputWriteQueue.push(output);
var transaction = db.transaction("files", "readwrite");
var objectStore = transaction.objectStore("files");
var request = objectStore.get(file.id);
request.onsuccess = function()
{
request.results += nextPartOfOutput
objectStore.put(request.results);
};
Run Code Online (Sandbox Code Playgroud)
输出开始变大后导致崩溃.我可以在数据库中写一堆小条目,但是后来我不得不将它们全部读入内存,以便将它们连接起来.参见我的问题的第2部分......
我可以创建一个数据对象URL来引用IndexedDB中的值而不将该值加载到内存中吗?对于小字符串我可以做:
var url = window.URL.createObjectURL(new Blob([myString]), {type: 'text/plain'});
Run Code Online (Sandbox Code Playgroud)
但对于大字符串,这并不太好.实际上,它在加载字符串之前崩溃了.似乎使用get()IndexedDB的大读取导致Chrome至少崩溃(甚至开发人员工具崩溃).
如果我使用Blob而不是字符串会更快吗?这种转换便宜吗?
基本上我需要一种方法,使用JavaScript,将一个非常大的文件写入磁盘,而不是在任何一点将整个内容加载到内存中.我知道你可以提供createObjectURL一个文件,但这在我的情况下不起作用,因为我正在从用户提供的文件中生成一个新文件.
我一直在使用Firefox中的IndexedDB(Ubuntu)
有没有办法可视化IndexedDB数据库内容?或者我必须以程序化的方式来做它?
我正处于开发应用程序的研发阶段,具有以下关键要求:
由于配额限制,我无法使用网络存储 - 我正在比较SQLite和Indexed DB.
我对API的选择很困惑.在Safari上是否还有其他SQLite替代方案或索引数据库支持?
我阅读了一些关于IndexdDB的文章,但是找不到有关持久化数据生命周期的详细信息.我打算将它用于数据操作会话,并在用户完成后上传.但如果:
此外,我通过基于cookie的身份验证维护用户会话.如果用户注销并重新登录,会发生什么?有没有办法在注销前检索数据?
有关处理此问题的任何文件表示赞赏 我浏览了规范,但读起来并不是那么好.
谢谢.
我编写了一个离线应用程序,它利用IDB存储通常存在于MySQL数据库中以供离线使用的图像和文本.
但是,我试图找出一种方法,我可以读取IndexedDB的设备存储限制.我目前正在使用以下方法来确定这一点,尽管它仅适用于Chrome.
我正在使用/sf/answers/1284537201/中的代码段,它可以获得storageInfo基于WebKit的内容,但是如果有人知道如何在FF&IE上获取它,更具体地说是Safari会很棒.
根据我收集的内容,这将返回该浏览器为域而不仅仅是IDB存储的所有内容的使用配额.但是,我使用的是重新配额.从这个我要么执行AJAX请求到服务器来获取所有将要存储的文件的估计规模,制定出是否有足够的存储空间,否则我将计算存储在IDB的ammount的制定出是否有足够的存储更多.
我想知道是否有人采用更"流线型"的方法?还有一种方法可以检查FF/IE中的重新配额,特别是Safari,甚至可以检查IDB的配额.