如何充分利用 OneNote,发挥它的全部价值和潜力
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何充分利用 OneNote,发挥它的全部价值和潜力相关的知识,希望对你有一定的参考价值。
如何充分利用 OneNote,发挥它的全部价值和潜力?嗯,就是你这样。使用环境可以用surface那样的笔记本。如何发挥出onenote的潜力呐?
OwnDing,自称在半导体行业
千寻、
garden su、
Nicole酱
最重要的是知道的自己的需求,让软件尽可能的满足你的需求,这样就得到该软件对于你来说的全部价值。要不然我真不知道会不会有人用到onenote的全部功能。
刚开始看到onenote时被它的功能强大所震撼,于是买了office2010,但是在最开始的一个多月里我都不知道要拿这个软件做什么,陷入了有需求但是不知道怎么使用的问题,后来我用onenote记日记和做知识管理,这样使用下来也有三年了。
我感觉onenote就像纸质的笔记本,你新建“笔记本”,命名这个笔记本,名字多半反应了这个笔记本的用途,之后便可以新建“分区组”和“分区”(就像一本书的章和节),同上学时我们记笔记是一样的模式。
恐怕题主主也是在使用onenote的,但想更好的使用,接下去是我的一些使用方法,我们可以探讨下
1、收集资料。onenote是收集资料的利器,你可以将所有自己觉得有用的信息都往里面丢,而且不用点保存。当你在互联网上看到一篇资料,使用IE浏览器将资料发送到onenote,它会自动把网址也附上,方便我们日后查看原网页,知道资料的出处。“停靠到桌面”功能也是很方便搜集资料和做笔记。
2、复制图像的文字。onenote一个比较强悍的功能是可以帮你将图像上的文字复制下来,这个在写论文的时候非常有用。你可以直接将PDF文档转化为文字,而不需要苦苦寻找PDF转WORD的软件了 ;) 使用的方法也很简单,先将资料打印到Onenote或者图片保存到Onenote,之后在图片上右键单击就可以看到“图片中文字”选项了。
3、知识管理。可能同第一点有些重复了,但是onenote的逻辑可以让你对自己的知识进行管理。俗话说:好记性不如烂笔头! 切记:不要因为自己年轻就觉得可以用脑记住所学的所有知识! 等要用到又有些忘记的时候便可以翻看onenote笔记了。onenote也是做读书笔记的重要工具。笔记本->分区组->分区->页->子页,不仅如此还可以在“分区组”中新建“分区组”,实际上Onenote一整个逻辑层次是很清楚的。
你可以把所有的资料扔进Onenote里,比如Word、Excel、PDF、txt等,选择插入档案后者列印到Onenote,之后你就可以随心所欲的在资料上注释。Onenote最大的优势是你可以在页面任何地方插入资料和编辑,就像你可以拿笔在一张纸中的任何地方记录,但是使用Onenote你不必担心纸张页面不够无法在原有基础上补充和注释了。
上图有五角星标记的其实是张图片,是为了便于理解下面的一个子程序插入到内容中来的。
任意位置标注和绘图
摘录文档中重要内容并且将原档放入Onenote
4、使用搜索。
可以搜索你所有笔记的内容和标记。当我们搜集的资料越来越多,记录的东西越来越多的时候,有时候我们发现我要找一些资料,但忘了在哪个笔记本哪个章节里了,这时我们就要毫不犹豫的使用搜索功能,就像我们不懂的时候要Google,onenote的搜索还是很不错的。
5、使用“标记”功能。当我们比较onenote和evernote时,大多会赞扬evernote的标签功能而onenote没有。
onenote的有标记功能,可以使我们标记一些重要的事情,比如“代办事项”、需要做的事等等。配合“标记”搜索使用。
6、win+s组合键。有没有这样的事,我们要截取屏幕的图片,但是发现没有截图软件,然后默默的打开QQ?好吧,有了onenote后,再也不需要这样了。不过在win8.1里,2010版的onenote不能使用这个组合键了。
7、创建子页,就是在页面下方创建它的子页面。
比如学习Excel函数吧,每个函数一个页面,我们就会发现屏幕上都是Excel函数页面,那么我们将函数作为一个页面的“子页',不想看到的时候是可以折叠的。
上图,有箭头的表示该页有子页(不过使用的是2013版的,10和13版格式是通用的)
还有onenote的”新页'选项是提供一些常用的模板的,如果你觉得onenote的页面看起来太单调的话。
8、密码保护分区。onenote可以为每个分区设置密码,防止信息被人查看。我就用来记录日记和一些网站的账户信息等。
9、Skydrive!!!
必须使用的功能。只要你有微软账号,就可以将你的笔记实时备份到云端,防止丢失,同时可以在多台设备间无缝同步。随时随地查看onenote里的内容。
刚注册用户会得到7G的skydrive存储空间,老用户(11年前?)是有25G的。虽然国内的厂商动不动就送你1T,但是如果你Onenote里的资料能达到7G,恐怕是“绝顶高手”了,况且SkyDrive的作用不仅仅是云端存储而已,你可以使用Office web,在浏览器里使用Word、Excel、PPT、Onenote。
10、共享笔记本。
同Google Docs一样,office也是可以协作的。
Onenote作为Office家族中的一员,可以同其它Office软件联合使用提高工作效率,比如Outlook。
11、安装一些有用插件,比如Onetastic
链接: Onetastic for OneNote
这个插件最重要的是方便查看你的onenote编辑日历,就是你在哪天使用onenote做了什么的记录。
12、数学公式方便输入。最近几版的office公式输入都是很方便的。
对于Surface,我去年买的RT,原以为会方便使用onenote,后来坑爹的发现RT不支持手写笔啊,用手指画真的是很悲壮的画面,所以现在为止都是使用的桌面版。
-----------------------------------------------------------------------------------------------------------
最近好像因为Onenote免费,大家讨论的都挺热烈,那麽我也觉得有必要再补充一些(趁现在上班时间 ;) )。
Evernote和Onenote各有优缺点,我喜欢在手机上使用Evernote记些事情或者保存些在知乎或者其它地方看到的文章资料,在手机端的话Onenote还需加油。
1)、文件保存
在前面“知识管理”有提到的(上面的一些图片中显示PDF图示的),将你任何的资料类型直接拖入Onenote就可以保存。
这个页面包含两个文件,一个PDF一个思维导图(思维导图顺便列印到页面里了)。这些文件你双击是可以直接打开的。
2)、文本编辑
【看下面的图片左边的两个符合(田字和箭头)
我们双击田字会发生什麽?
是的,它还包含很多内容。】
使用方法:a、随意输入一行字,按回车键 b、在第二行按"Tab"键缩进即可 c、点击第一行边框外的箭头就可以看到效果(田字)。
这个特性不论理工科和文科都有用吧。
3)、表格
Onenote你祇要输入一个数字(文字),之後再按“Tab”键就可以转化为表格。
还有同Excel协同部分(如果你工作经常用到Excel的话)。
你可以在选项卡插入Excel表格,或者直接将Excel拖入到Onenote中,选择插入试算表。Excel会直接将表格内容显示在Onenote中,同时包含原文件。你编辑Excel保存之後,Onenoe显示的内容是同时更新的。嗯,这点对我来说真的很有用。
4)、插入扫描档
如果你用WindowsPhone的话,在电脑端点“插入”--“扫描的图像”,可以选择你的WP设备。
到最後竟然插入不了图片 ;(
这个问题我来答,这个问题我来答!!!!!!!!
我能告诉你我是为了onenote才买的Surface Pro吗?用了三年的onenote,各种方便各种好用,出了Surface Pro的时候,我就知道,这就是我需要的笔记本,7388入手,毫不犹豫的
我能告诉你我的笔记系统有多大吗?,看看截图吧,里面任何一个笔记拖到evernote里面立马死机
我理解的知识管理,也不是随便从网站上摘抄一点网页,放在笔记里就以为自己拥有了一切,我用onenote,是因我我是内容的创造者,我不需要强大的剪辑功能,我需要的快捷的创造,和稳定、稳定、稳定,onenote可以满足我
周蓉如,回答问题爱分1、2、3点
煦泉、
高煜寒、
陈吉吉
最近我自己录制了一套OneNote的视频教程,初衷是觉得OneNote是一款很好很强大的笔记管理应用(可以在各大平台免费下载使用,连1%的WP都有呢!简直不可思议→_→),但是很少人知道太可惜了,所以向大家(只是我的公众账号和朋友圈而已)推荐了一下,接着出了一篇图文教程,大家反应文字太多看起来吃力,希望我录制视频教程,我就答应了。
当然,我不会马上把视频贴出来就走人,还是要先让大家有个整体的了解。
====更新日志:====
08.01:【乱扯】OneNote不只可以作为笔记本,还可以成为你的个人管理工具(其他人的提示)
08.02:【乱扯】发送到OneNote工具(截图技巧)
08.08:【乱扯】添加战导的回答
08.18:【四】添加冷门小技巧:折叠文本
08.22:【四】添加冷门小技巧:将邮件发送到指定邮箱,保存邮件内容至笔记本
08.22:【八】不定期更新一些使用姿势
08.23:【三】人民教师看过来!交互式教学工具OneNote Class Notebook Creator(OneNote课堂笔记本)
================
乱扯:
补充一个可能其他答案都没有提到的非常重要的点
题主问的问题是“如何发挥出onenote的潜力”
如果这个问题我只能用一句话来回答的话,那就是:别真的只把它当成笔记本来用啊,它完全可以变成你的个人管理工具甚至更多(比如教师的教学工具)!
热爱生活是什么样子的? - 高胜的回答
答主@高胜提供了一种用Excel表记录生活的方法
高度自律是一种怎样的体验? - 张兆杰的回答
答主 @张兆杰提供的用Word文档记录生活的方法
还有一个回答我找了很久没找到,是答主利用windows自带的记事本记录、管理自己生活学习的,大概是看了多久书记几分,做了什么事记几分或者扣积分……答主好像学的是日语,有只有知道的知友可以告诉我。这个是我比较吃惊的,因为很多人(就是我)总是用着各种“高大上”的软件管理自己仍旧拖延懒散,但是有的自律性高的人只用一个txt就可以了
学霸们是如何高效率地学习、工作、生活的? - 战导的回答
找到了,感谢 @爬犁腿 的提醒!
工具就摆在那里,它能发挥多大的潜力都在于我们。
OneNote可以记录学习资料、工作笔记(可以将Outlook里面的邮件发送到OneNote),还可以记录个人生活,里面的待办事项标记分为待办和已办(查找标记时候可以分开查询)可以作为GTD工具
在我的手机上,创建了三个磁贴,第一个打开OneNote,第二个直接进入待办事项页面,可以迅速记录新增的任务,第三个新笔记可以快速新建其他主题的笔记
手机上确实功能要少一点,但是作为“临时便签盒"记录一些临时的事项和灵感还是很棒的(大家也可以使用印象、为知等笔记应用做临时记录,再把重要内容转移到OneNote这个主战场)
关于用OneNote做生活/学习记录可以参考我的第四期视频教程里举的栗子(一个地方写"我做了什么",一个地方写"我收获了什么",再通过链接把它们联系起来)欢迎大家和我一起分享使用OneNote的各种姿势
一、为什么要用OneNote而不是其他?
1、很多人都安装了Office,其中大部分选择默认安装,这也就使OneNote默默入驻了电脑,所以,为什么放着现成的笔记应用不用呢?
2、OneNote和大家常用的Word、Excel、PPT、Outlook……是一家人,它可以和它们配合使用,让你的资料联系起来并能更好地被管理
3、OneNote的笔记编辑功能是同类应用中最强大的,对,最强大,没有之一
4、 很多人说的同步失败问题这个我自己没有体验到过,况且我使用的是WP,OneNote体验更棒(刚用印象笔记就掉过笔记我会乱说?非黑)
二、OneNote能干嘛(有多强)?
笔记的录入
1、OneNote是笔记本,它里面可以创建分区组,分区,分页,子页,可以让你的知识管理地非常系统,就像书籍一样,层次分明
2、OneNote的页面既是有序的,也是无序的。你的内容都被放在了一个个的框里面,在这个框里,图片和文字都是一行一行排列的,而不同的框是可以随意挪动甚至重叠的,可以让你的编辑在随意的同时又不失整洁
3、对于文字,随心所欲选择字体、字号,加粗、倾斜、加删除线,上下标、项目编号……对于图片,拉伸缩放、裁剪、排列、旋转……还有逆天的识别图中文字功能;绘图包含多种不同粗细、不同颜色的笔和荧光笔,还可以画常用形状;插入功能包罗万象:表格、Excel表格、文档、PPT、PDF、截图、本地图片、联机图片、录音、录像、公式、符号……
4、OneNote有一个小工具(发送至OneNote工具),可以迅速新建快速笔记和截图和在Word、Excel、PPT、IE打开的时候将页面内容发送到OneNote(OneNote的独门绝技),截图快捷键是Win+S,一般情况下开机自启,所以大家不用截图的时候打开QQ了(其实平时还可以安装个小Q书桌开机自启,也可以截图)
笔记的管理
1、插入标记:为特殊或者重要的内容(文字、墨迹、图片……)添加标记方便日后查询;创建摘要页使所有添加过标记的内容新建为一页;录音定位也算个标记吧
2、插入链接:每个笔记本、分区、分页可创建链接在别处,每页里面的内容也可以创建链接;在某网页上复制内容到笔记本粘贴时会在尾部显示该网页的链接;可以将本地文件链接到笔记本;将其他文档的内容(某个文字、段落、PPT的某一页……)链接到笔记;
3、拼写检查、查找同义词、翻译为其他语言、分区设置密码还有启动必应搜索引擎搜索网页内容
4、可以查看最近编辑过的地方,最近编辑过的人(多人编辑、协同工作),某页面最近的不同版本、已删除的内容
5、搜索:CTRL+F或点击”添加页“上边的搜索框搜索文字
三、OneNote有哪些小(hao)伙(ji)伴(you)?
1、微信公众账号:微软云笔记(将订阅号推送的图文发送到OneNote,自己的文字,语言都可以)
2、微博关注并@微软云笔记(将微博文字和图片发送到OneNote)
3、Chrome插件:OneNote Clipper(将网页内容发送到OneNote)
4、软件内插件:Onetastic、数字笔记珍宝……(新增好多小工具啊!)
5、有的网站支持将文章发送到OneNote哦!
比如:订阅网站feedly、inoreader
点击链接了解更多:OneNote Featured Apps使用这些应用和设备充分利用 OneNote。
6、OneNote交互式教学工具 OneNote Class Notebook Creator
OneNote 课堂笔记本创建程序能让教师在数分钟内为其课堂设置理想的 OneNote 环境。通过此适用于 Office 365 的 SharePoint 应用,教师可以迅速地为每个学生设置个人工作区、存放讲义的内容库、以及课程和创造性活动的协作空间,所有的一切,尽在一个功能强大的 OneNote 笔记本中。OneNote 课堂笔记本让教师能够集中精力处理教学事务,而不用花时间在软件或设备中。随时随地都能自动交换学生的作业和教师的反馈。
老师可以:
a、让学生轻松地记录自然视觉化笔记 - 可随意在 OneNote 的“任何事项、任何地方”的自由形式画布中,放置图像、文本、打印输出、表格、墨迹、屏幕截图和文件
b、持续跟踪学生的表现 - 通过观察学生的整个学习过程(从做笔记到解决问题再到提交作业),来了解哪些学生进步了,而哪些学生需要帮助
c、在学生写作业时,提供即时辅导来彻底改变家庭作业反馈模式
d、通过页面快速同步功能,鼓励学生之间的合作创新
e、在 OneNote 上查看打印输出,而非用纸张打印出来,以减少纸张用量
f、在灵活的共享笔记本结构中组织所有课程、讲义和作业
g、将 OneNote 与数字墨迹的创造力相结合,提供最自然的数字教学体验
微软发布OneNote交互式教学工具
有土逼视频教程:https://www.youtube.com/watch?v=sVF90nP9qGQ
四、OneNote有哪些冷门的小技巧?
1、计算器
2、制作长图
3、快速创建表格
4、复制图片中的文本
5、折叠文本、图片等(视频里面没有提到增加到这里好了)
a、在页面内将需要折叠的内容选择起来按Tab缩进
b、双击小标题前的灰色箭头,内容就折叠进去了
c、再双击加号,折叠内容就展开了,支持多级折叠
ps:想去掉文字段落缩进,可以选择该段文字之后,鼠标移到它们前面的灰色箭头上,向左拖动即可;缩进时可同理向右拖动(图片等同理
6、在OneNote网站选定自己的邮箱,用此邮箱发送邮件到me@onenote.com,邮件内容就会发送到OneNote笔记本了 Sign in to your Microsoft account
另外:将OneNote的页面发送到某邮箱,页面中的录音会作为附件一起发送过去~
五、我反复强调的内容
1、OneNote不是演示软件,它是个人笔记本,好不好看不重要,重要的是,笔记系不系统?逻辑清不清晰?重要的内容能不能迅速被找到?笔记本是否保存得当?(备份、保存工作要做好,笔记丢失一切为零)
2、知道所有笔记编辑的技巧都不如你知道怎样组织你的笔记重要。每个人的信息、知识、重点都不同,分类、标记这些事只能你自己完成,建立你的笔记王国需要你清楚你的笔记的属性,然后决定放在哪个分区?它跟哪些内容有联系?它是不是重点?
这点我在视频中举过自己的栗子和知乎其他答案中的图片作为提示,当时没有征得原作者同意实在抱歉,稍后我会联系作者,侵则删。
六、激动人心的时刻
关于我使用OneNote的心得、经验都放在我的微信公众账号里面了,当然我不会在这里放个二维码让大家扫一扫关注我,因为过几天等我推送完最后一篇图文之后就会停止更新了(8月7日推送完毕,大家不用关注我),并且我删除了我在腾讯视频中上传的视频(不要问我为什么,自己看了几遍,听到自己的声音感觉很奇怪很肉麻,放在公众场合会觉得尴尬),所以现在在公众账号里面也看不到了,就剩一些长阴影、Office Sway、TED演讲等等的杂七杂八的介绍和一些碎碎念。现在视频只在百度云了,里面还有插件和图文介绍,是写在OneNote里转换成PDF的 参考技术A 最重要的是知道的自己的需求,让软件尽可能的满足你的需求,这样就得到该软件对于你来说的全部价值。要不然我真不知道会不会有人用到onenote的全部功能。
刚开始看到onenote时被它的功能强大所震撼,于是买了office2010,但是在最开始的一个多月里我都不知道要拿这个软件做什么,陷入了有需求但是不知道怎么使用的问题,后来我用onenote记日记和做知识管理,这样使用下来也有三年了。
希望对你有所帮助!
内存数据库如何发挥内存优势?
写在前面
与以磁盘存储为主的普通数据库相比,内存数据库
的数据访问速度可以高出几个数量级,能大幅提高运算性能,更适合高并发
、低延时
的业务场景。
不过,当前大部分内存数据库仍然采用 SQL 模型,而 SQL 缺乏一些必要的数据类型和运算,不能充分利用内存的特征实现某些高性能算法。仅仅是把外存的数据和运算简单地搬进内存,固然也能获得比外存好得多的性能,但还没有充分利用内存特征,也就不能获得极致的性能。
下面我们来看看,有哪些适合内存特征的算法
和存储机制
,可以进一步提升内存数据库计算速度。
指针式复用
我们知道,内存
可以通过地址(指针)来访问。但 SQL 没有用内存指针表示的数据对象,在返回结果集时,通常要把数据复制一份,形成一个新的数据表。这样不仅多消耗 CPU 时间(用于复制数据)而且还会占用更多昂贵的内存空间(用于存储复制的数据),降低内存使用率。
除了 SQL 型的内存数据库外,Spark 中的 RDD 也有这个问题,而且情况更严重。为了保持 RDD 的 immutable 特性,Spark 在每个计算步骤后都会复制出新的 RDD,造成内存和 CPU 的大量浪费。所以,即使耗用了巨大资源,Spark 也仍然做不到高性能。相比之下,SQL 型的内存数据库通常还会优化,在 SQL 语句中的计算会尽量使用内存地址,通常要比 Spark 的性能更好。
但是,受到理论限制,实现 SQL 的逻辑时,返回的结果集就必须复制了。如果涉及多步骤的过程运算,要多次在上一步的结果集(临时表)基础上进一步计算,SQL 的劣势就会很明显了。
事实上,如果没有改变数据结构,我们可以直接用原数据的地址形成结果集,不需要复制数据本身,仅仅多保存一个地址(指针),同时减少 CPU 和内存的消耗。
SPL 扩展了 SQL 的数据类型,支持这种指针式复用机制。
比如:
对订单表按照订单日期(odate)范围过滤后,分别求出订单金额(amount1)大于 1000 和运货费(amount2)大于 1000 的订单,再计算出两者的交集、并集和差集,最后将差集按照客户号(cid)排序。
SPL 代码大致是这样:
A | B | |
1 | =orders.select(odate>=date(2000,1,1) && odate<=date(2022,1,1)) | |
2 | =A1.select(amount1>1000) | =A1.select(amount2>1000) |
3 | =A2^B2 | =A2&B2 |
4 | =A2\\B2 | =B2\\A2 |
5 | =A4.sort(cid) | =B4.sort(cid) |
以上代码中有好几个步骤,有的中间结果也被用了多次,但由于使用的都是订单表记录的指针,所以内存占用增加的很少,也避免了记录复制的耗时。
外键预关联
外键关联
是指用一个表(事实表)的非主键字段,去关联另一个表(维表)的主键。
比如订单表中的客户号和产品号分别关联客户表、产品表的主键。
现实运算中这种关联可能多达七八个甚至十几个表,还可能出现多层的关联。SQL 数据库通常使用 HASH JOIN 算法来做内存连接,需要计算和比对 HASH 值,过程中还会占用内存来存储中间结果,关联表很多时计算性能就会急剧下降。
其实,我们也可以利用内存指针
引用机制事先做好关联。在系统初始化阶段,把事实表中的关联字段值转换为对应维表记录的指针。因为维表的关联字段是主键,所以关联记录唯一,将外键值转换成记录指针不会引起错误。在后续计算中,需要引用维表字段时,可以用指针直接引用,无需计算和比对 HASH 值,也不需要再存储中间结果,从而获得更优的性能。SQL 没有记录指针这种数据类型,也就无法实现预关联了。
SPL
则从原理上支持并实现了这种预关联机制。
例如,完成订单表和客户表、产品表预关联的代码大致是这样:
A | |
1 | =file("customer.btx").import@b().keys@i(cid) |
2 | =file("product.btx").import@b().keys@i(pid) |
3 | =file("orders.btx").import@b().switch(cid,A1;pid,A2) |
4 | >env(orders,A3) |
A1、A2 加载客户表和产品表。
A3:加载订单表,将其中的客户号 cid、产品号 pid 转换为对应维表记录的指针。
A4:将完成预关联的订单表存入全局变量,供后续计算使用。
系统运行时,按照产品供应商过滤订单,再按客户所在城市分组汇总的代码大致是下面这样:
A | |
1 | =orders.select(pid.supplier=="raqsoft.com").groups(cid.city;sum(pid.price*quantity)) |
订单表中的 pid 已经转换为产品表记录的指针,所以可以直接用“.”操作符引用产品表记录。 不仅书写更简单,而且运算性能也快得多。
只是两、三个表关联时,预关联和 HASH JOIN 的差别还不是非常明显。这是因为关联并不是最终目的,之后还会有其它很多运算,关联本身运算消耗时间的占比相对不大。但如果关联情况比较复杂,涉及的表很多,以及有多层的时候(比如订单关联产品,产品关联供应商,供应商关联城市,城市关联国家等等),预关联的性能优势会更明显。
序号定位
与外存相比,内存的另一个重要特征是支持高速的随机访问,可以快速从内存表中按指定序号(也就是位置)取出数据。在做查找计算时,如果被查找的值正好是目标值在内存表中的序号,或者很容易通过被查找值计算出目标值的序号,我们就可以用序号直接取目标记录。这种方法不需要进行任何比对就能直接取出查找结果,性能不仅远远好于遍历查找,也好于使用索引的查找算法。
但是,SQL 以无序集合为基础,不能按序号取成员,只能用序号去查找。如果没有索引就只能遍历查找,会非常慢。即使有索引也要计算 HASH 值或用二分法查找,速度也比不上直接定位。而且,建立索引也会占用昂贵的内存。如果数据表中没有序号还要先排序再硬造个序号时,性能就会更差。
SPL 以有序集合为基础,提供序号定位功能。比如订单表中的订单号是从 1 开始的自然数。在查找订单号 i 时,直接取订单表中的第 i 条记录就行了。再比如数据表 T 从 2000 年到 2022 年每天存储一条数据,现在需要查询指定日期的记录。日期虽然不是目标值的序号,但是我们可以先算出指定日期距离起始日期的天数。这就是目标值的序号,然后再用序号取 T 表记录就可以了。对表 T 用序号定位查找 2022 年 4 月 20 日记录的代码,大致是下面这样:
A | |
1 | =date(2022,12,31)-date(1999,12,31) |
2 | =T_orginal.align@b(to(A1),dt-date(1999,12,31)) |
3 | =env(T,A5) |
4 | =T(date(2021,4,20)-date(1999,12,31)) |
A1:计算出 2000 年到 2022 年总天数是 8401 天。
A2:用原始的 T 表记录计算出距离起始日期的天数,再和 to(A1)这个自然数集合 [1,2,3,…,8401] 对齐,空缺的日期会用 null 补齐。align 的 @b 选项表示对齐时将使用二分法来查找位置,这样完成对齐动作也会更快一点。
A3:计算好的结果,放到全局变量 T 中。
A4:要查找 2021 年 4 月 20 日记录,求出这个日期和起始日期距离 7781 天,直接取出 T 表中第 7781 条记录就可以了。
A1 到 A3 是对齐计算,用于处理空缺的日期,可以放在系统初始化阶段。在查找计算时,用 A4 中的序号定位代码就能得到查找结果,实际查找的日期可以作为参数传入。
集群维表
当数据量太大,超出单机内存时,就要使用集群来加载这些数据。许多内存数据库也支持分布式计算,通常是将数据分成多段,分别加载到集群不同分机的内存中。
JOIN 是分布式计算的一个麻烦任务,会涉及多个分机之间的数据传输。严重的时候,传输造成的延迟会抵消集群分摊计算量得到的好处,会出现集群变大反而性能并不能提升的现象。
SQL 体系下的分布式数据库,通常是将单机 HASH JOIN 方法扩展到集群上。每个分机根据 HASH 值将本机数据分发到其他分机,确保相关联的数据在同一分机上。然后再在各个分机上做单机连接。但是,HASH 方法在运气不好的时候,可能会造成数据分配的严重不均衡,需要借助外存来缓存这些分发到的数据,否则可能因为内存溢出而导致系统崩溃。但是,内存数据库的主要特征就是将数据加载到内存中计算,出现外存缓存会严重拖慢计算性能。
实际上,外键关联的事实表和维表有很大区别。事实表一般都比较大,要用各个分机内存分段加载才能装的下。正好事实表也比较适合分段,每个分段的数据都相互独立,分机之间不需要相互访问。而维表记录则会被随机访问,事实表的任何一个分段都可能关联全部维表记录。我们可以利用事实表和维表的区别,对集群的外键关联提速。
如果维表比较小,则将维表全量数据复制到所有分机内存中。这样,每个分机中的事实表分段和全量维表就可以继续完成预关联,完全避免了关联过程中的网络传输。
如果维表也很大,单机内存放不下,只能在各分机内存中分段加载。这时,没有一个分机上有全量的维表,外键关联计算就无法避免网络传输了。不过传输内容并不算很大,只涉及事实表的外键和维表关联记录的字段,事实表其它字段不需要传输,计算可以直接完成,过程中也不会产生缓存数据。
SPL 从原理上区分维表和事实表,针对维表较小和维表较大两种情况,分别提供了维表复制机制和分段维表机制,实现了上述算法,能显著提高集群情况下外键关联的计算性能。
备胎式容错
集群系统必须要考虑容错,内存数据的容错和外存是不同的。外存一般使用副本的方法,即同一份数据有多个副本,某个分机失效后仍然能在其它分机找到数据。这种机制的存储利用率很低,只有 1/k(k 是副本数量)。
但是,对于内存中的数据,却不能使用这种副本容错方法。这是因为硬盘足够便宜且几乎可以无限扩容,但是内存要昂贵的多而且扩容有上限。只有 1/k 的内存利用率是无法容忍的。
内存容错需要不同于外存的专门手段。SPL 提供了备胎式容错机制,将数据分成 n 段后分别加载到 n 个分机的内存中。然后准备 k 个空闲的分机作为备用机。当正在运行的某个分机失效时,则立即启用某个备用机,临时加载失效分机的数据,和其它分机重新组成拥有完整数据的集群继续提供服务。失效的分机排除故障后恢复使用,可以再充当备用机。整个过程和汽车更换备胎的模式很像。
备胎式容错机制的内存利用率可以高达 n/(n+k),远远高于副本式容错的 1/k。能加载进内存的数据量通常不会非常大,分机失效后临时加载的时间并不多,集群服务就可以较快地恢复。
回顾与总结
内存数据库的计算体系,必须充分利用内存的特征才能获得极致性能。从数据计算的角度来看,内存主要优点有:支持指针引用、支持高速随机访问、并发读取能力强。内存的缺点是:成本高昂、扩容有上限。
而 SQL 计算体系中缺乏一些必要的数据类型和运算,比如:缺少记录指针类型,不支持有序运算,JOIN 定义过于笼统,不区分 JOIN 类型等,从原理上就不能充分利用内存的上述特征实现某些高速算法。基于 SQL 的内存数据库,通常只是简单的照搬外存数据结构和运算,会出现各种问题。比如:记录式复制过多消耗 CPU 和内存;查找和 JOIN 性能没有达到极致。再比如集群方面:内存利用率过低;大量网络传输导致分机数量增加但性能反而下降;多机 JOIN 出现外存缓存等等。
开源数据计算引擎 SPL 扩展了数据类型和运算定义,可以充分利用内存的特征,从而实现多种高性能算法,让性能达到极致。其中,指针式复用利用内存特有的指针引用机制,节省了内存空间,而且速度更快。预关联同样利用指针引用机制,在初始化阶段完成很耗时的外键关联,后续计算中直接使用关联好的结果,计算速度显著提高。序号定位利用有序性,充分发挥内存高速随机访问的优势,不用做任何计算和比对,直接用序号读取记录,性能好于 HASH 索引等查找算法。集群维表有效避免或减少了网络传输、避免了外存缓存,备胎式容错在保证高可用性的前提下,有效提高了集群内存利用率。
除此之外,SPL 还提供了排号键、序号索引、数据类型压缩等等其它方法。程序员可以根据具体的场景,有针对性的采用这些方法,就能充分发挥内存的优势,从而有效提升内存数据计算的性能。
以上是关于如何充分利用 OneNote,发挥它的全部价值和潜力的主要内容,如果未能解决你的问题,请参考以下文章