gpt4 book ai didi

javascript - IndexedDB:将 url 映射到接受的 Markdown/HTML 文本格式标记的正确架构

转载 作者:行者123 更新时间:2023-12-03 11:03:11 25 4
gpt4 key购买 nike

免责声明

I am very new to the concept of object oriented databases and I honestly don't have much experience with relational databases either.

<小时/>

我正在尝试使用indexedDB来存储一些数据客户端,但在我进入它之前。我需要决定一个合适的模式。

我需要满足以下用例:

  • 我将根据 URL 查询数据库,并且需要取回网站在其文本区域中用于 Markdown/HTML 文本格式的所有标签。 (不过,每个命令我只需要一组标签)

目前,我计划将数据库中的每个网址设为自己的字典键。

例如:

[ youtube.com:{ {command:"bold",   open:"*", close:"*" },
{command:"italic", open:"_", close:"_" },
...
},

StackOverflow.com: { {command:"strong", open:"<strong>", close:"</strong>" },
.....
},
.......
.......

]

任何人都可以指出这种方法的缺陷/建议替代方案并给出解释吗?

出于性能原因,我最终可能会将最内部的字典更改为数组,但我在这里寻求有关一般模式的建议,而不是在那个小点上。尽管如此,对此的建议也将不胜感激。

编辑

现在我对 keyGen 和索引有了更多的了解,我认为肯定有更好的方法来做到这一点。也许我可以将命令名称本身设置为 keyPath ,并让该键中的每个对象都包含一组标签和使用该组标签的 url 数组。

额外问题:如果有人碰巧知道一种方法,可以在访问网站时动态(实用地)检测网站使用的 Markdown 标签(如果使用任何标签),那么我将奖励您 9001 独 Angular 兽美元。

最佳答案

快速猜测是一个单一的对象存储,您可以在其中存储具有两个属性的对象:url 和标签。鉴于每个对象都由 URL 唯一标识,因此 url 属性将是键路径。 Tags 属性将是一个可变长度的字符串数组。然后您可以拥有其他属性,但这些将是两个重要的属性。

然后,您可以在标记属性上创建索引,并设置多条目标志以启用按标记查询页面。

例如,在 onupgradeneeded 中,使用:

function onUpgradeNeeded(event) {
var db = event.target.result;
var pageStore = db.createObjectStore('pages', {keyPath: 'url'});
pageStore.createIndex('tagIndex', 'tags', {multiEntry: true});
}

例如,将一个对象放入存储中:

function insertPage(db, page, callback) {
var tx = db.transaction('pages','readwrite');
tx.oncomplete = callback;
var pageStore = tx.objectStore('pages');
pageStore.put(page);
}

var openRequest = indexedDB.open(...);
openRequest.onupgradeneeded = onUpgradeNeeded;
openRequest.onsuccess = function(event) {
var db = event.target.result;

var mockPage = {
url: 'http://www.stackoverflow.com',
tags: ['bold','comment','italics'],
foo: bar
};

putPage(db, mockPage, function(event) {
console.log('Completed putting %o into pages object store', mockPage);
});
}

通过url查询:

function findPageByURLThenHandle(db, url, callback, fallback) {
var tx = db.transaction('pages','readonly');
var pageStore = tx.objectStore('pages');
var request = pageStore.get(url);
request.onsuccess = function(event) {
var page = event.target.result;
if(page) {
callback(page);
} else {
fallback(url);
}
};
}

var openRequest = indexedDB.open(...);
openRequest.onsuccess = function(event) {
var queryURL = 'http://www.stackoverflow.com';
var db = event.target.result;

findPageByURLThenHandle(db, queryURL, function(page) {
console.log('Found %o for %s', page, queryURL);
}, function(url) {
console.log('Could not find page for url %s', url);
});
};

要查找具有给定标签的所有页面:

function handlePagesForTag(db, tag, callback) {
var tx = db.transaction('pages','readonly');
var pageStore = tx.objectStore('pages');
var tagIndex = pageStore.index('tagIndex');
var request = tagIndex.openCursor(tag);
request.onsuccess = function(event) {
var cursor = event.target.result;
if(!cursor) return;
var page = cursor.value;
callback(page);
cursor.continue();
};
}

希望可以帮助您入门。

关于javascript - IndexedDB:将 url 映射到接受的 Markdown/HTML 文本格式标记的正确架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27988595/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com