无标题 Posted 2023-04-09 小小怪物
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无标题相关的知识,希望对你有一定的参考价值。
MicroStream 是一个高性能的内存中 NoSQL 数据库平台,用于超快的数据处理和存储。它通过消除面向对象的编程语言和关系数据库之间对转换层的需求来帮助减少对象关系阻抗不匹配,从而提高了生产力和性能。通过将 MicroStream 的强大功能与 Jakarta NoSQL 和 Jakarta Data 提供的标准 API 相结合,开发人员可以创建强大且可扩展的应用程序,轻松处理大量数据。
MicroStream 的关键优势
MicroStream 的关键优势之一是它能够实现闪电般的数据访问时间,这要归功于其独特的架构,该架构消除了对基于磁盘的存储的需求并最大限度地减少了开销。借助 MicroStream,您可以轻松地实时存储和检索大量数据,使其成为需要快速数据处理和分析的应用程序的理想选择,例如金融交易系统、游戏平台和实时分析引擎。MicroStream 提供简单直观的编程模型,可轻松集成到您现有的应用程序和工作流程中。
MicroStream 与传统数据库的区别
MicroStream 与其他数据库之间的主要区别之一是它专注于内存存储。虽然传统数据库依赖于基于磁盘的存储,这可能会导致磁盘访问时间导致性能降低,但 MicroStream 将所有数据保存在内存中,从而实现更快的访问。此外,MicroStream 的独特架构使其能够实现出色的压缩率,进一步减少内存占用,并使在给定的内存量中存储更多数据成为可能。最后,MicroStream 的设计具有简单性和易用性。它提供了开发人员友好的界面和最少的依赖关系,使您可以轻松集成到现有的开发工作流程中。
MicroStream 消除对象关系阻抗不匹配
对象关系阻抗不匹配是指在面向对象的编程语言和关系数据库之间映射数据的挑战。虽然可以使用各种技术和模式来解决对象关系阻抗不匹配问题,例如对象关系映射 (ORM) 工具或数据库设计模式,但这些解决方案通常需要权衡取舍。它们可能会给系统带来额外的复杂性。最终,要在面向对象编程和关系数据库设计之间实现平衡,需要仔细考虑手头应用程序的特定需求和约束。
MicroStream 可以通过消除面向对象的编程语言和关系数据库之间对转换层的需求来帮助减少对象关系阻抗不匹配。由于 MicroStream 是一个内存中的 NoSQL 数据库平台,它将数据存储为对象,因此它非常适合面向对象的编程语言,无需在面向对象的数据结构和关系数据库表之间进行映射。借助 MicroStream,开发人员可以直接使用代码中的对象,而无需担心将数据映射到关系数据库架构的复杂性。它可以提高生产力和性能,因为不需要额外的转换层,这可能会带来开销和复杂性。
MicroStream 与 Jakarta NoSQL 和 Jakarta Data 的结合
Jakarta NoSQL 和 Jakarta Data 是关键规范,它们提供了一组标准的 API 和工具,用于管理基于 Java 的应用程序中的数据。Jakarta NoSQL使开发人员能够使用熟悉的界面与各种 NoSQL 数据库进行交互,而 Jakarta Data 则提供了用于处理多种格式数据的 API。这些规范有助于降低应用程序开发和维护的复杂性和成本,使开发人员能够在不同的 NoSQL 数据库和数据格式之间实现更大的互操作性和可移植性。
MicroStream 提供了一个高性能的内存中 NoSQL 数据库平台,无需在面向对象的编程语言和关系数据库之间建立转换层,从而减少了对象关系阻抗不匹配,提高了生产力和性能。通过将 MicroStream 的强大功能与 Jakarta NoSQL 和 Jakarta Data 提供的标准 API 相结合,开发人员可以创建强大且可扩展的应用程序,轻松处理大量数据。
下一步,可以使用 Eclipse MicroProfile 来创建一个基于 MicroStream、Jakarta NoSQL 和 Jakarta Data 的应用程序。
使用 Eclipse MicroProfile 创建 MicroStream 应用程序
首先,进入 Eclipse MicroProfile Starter,定义初始范围的配置。您的应用程序将是一个简单的库服务,使用 Open Liberty 与 Java 17 和 MicroStream 一起运行。
下载项目后,必须添加 MicroProfile 和 MicroStream 之间的依赖集成。此项目依赖项稍后将在内部更改为 MicroStream,因此这是此集成的临时房屋:
.XML 1 <dependency> 2 <groupId>expert.os.integration</groupId> 3 <artifactId>microstream-jakarta-data</artifactId> 4 <version>$microstream.data.version</version> 5 </dependency>
这种集成适用于任何使用 MicroProfile 5 或更高版本的供应商,目前我们正在使用 Open Liberty。它支持 Jakarta 持久性规范:NoSQL 和数据。
定义项目后,创建一个实体。下面的代码显示了注释。我们目前使用 Jakarta NoSQL 注释。
下载项目后,我们必须添加MicroProfile和MicroStream之间的依赖集成。此项目依赖项稍后将在内部更改为MicroStream,因此这是此集成的临时房屋:
.XML
1
< dependency >
dependency >
2
< groupId > expert.os.integration</ groupId >
< groupId > expert.os.integration</ groupId >
3
< artifactId > microstream-jakarta-data</ artifactId >
< artifactId > microstream-jakarta-data</ artifactId >
4
< version > $microstream.data.version</ version >
< version > $microstream.data.version</ version >
5
</ dependency >
dependency >
这种集成的美妙之处在于它适用于任何使用 MicroProfile 5 或更高版本的供应商。目前,我们正在使用 Open Liberty。这种集成支持Jakarta持久性规范:NoSQL和数据。
Jakarta NoSQL和Jakarta Data是由Jakarta EE工作组开发的两个相关规范,旨在提供用于使用NoSQL数据库和管理基于Java的应用程序中的数据的标准API。
定义项目后,让我们创建一个实体。下面的代码显示了注释。我们目前使用Jakarta NoSQL注释。Book
爪哇岛
1
<span style="color:#555555">@Entity</span>
2
public class Book
class Book
3
@Id
@Id
4
private String isbn;
private String isbn;
5
@Column ("title" )
@Column ("title" )
6
private String title;
private String title;
7
@Column ("year" )
@Column ("year" )
8
private int year;
private int year;
9
10
@JsonbCreator
@JsonbCreator
11
public Book(@JsonbProperty ("isbn" ) String isbn,
public Book(@JsonbProperty ("isbn" ) String isbn,
12
@JsonbProperty ("title" ) String title,
@JsonbProperty ("title" ) String title,
13
@JsonbProperty ("year" ) int year)
@JsonbProperty ("year" ) int year)
14
this .isbn = isbn;
this .isbn = isbn;
15
this .title = title;
this .title = title;
16
this .year = year;
this .year = year;
17
18
下一步是 Jakarta Data 部分,您可以在其中定义具有多个功能的单个接口。
爪哇岛
1
<span style="color:#555555">@Repository</span>
2
public interface Library extends CrudRepository<Book, String >
interface Library extends CrudRepository<Book, String >
3
4
最后一步是资源,我们将在其中提供服务。
爪哇岛
1
@Path ("/library" )
("/library" )
2
<span style="color:#555555">@ApplicationScoped</span>
3
@Consumes (MediaType.APPLICATION_JSON)
(MediaType.APPLICATION_JSON)
4
@Produces (MediaType.APPLICATION_JSON)
(MediaType.APPLICATION_JSON)
5
public class LibraryResource
class LibraryResource
6
7
private final Library library;
private final Library library;
8
9
10
@Inject
@Inject
11
public LibraryResource(Library library)
public LibraryResource(Library library)
12
this .library = library;
this .library = library;
13
14
15
@GET
@GET
16
public List<Book> allBooks()
public List<Book> allBooks()
17
return this .library.findAll().collect(Collectors.toUnmodifiableList());
return this .library.findAll().collect(Collectors.toUnmodifiableList());
18
19
20
@GET
@GET
21
@Path ("id" )
@Path ("id" )
22
public Book findById(@PathParam ("id" ) String id)
public Book findById(@PathParam ("id" ) String id)
23
return this .library.findById(id)
return this .library.findById(id)
24
.orElseThrow(() -> new WebApplicationException(Response.Status.NOT_FOUND));
orElseThrow(() -> new WebApplicationException(Response.Status.NOT_FOUND));
25
26
27
@PUT
@PUT
28
public Book save(Book book)
public Book save(Book book)
29
return this .library.save(book);
return this .library.save(book);
30
31
32
@Path ("id" )
@Path ("id" )
33
public void deleteBy(@PathParam ("id" ) String id)
public void deleteBy(@PathParam ("id" ) String id)
34
this .library.deleteById(id);
this .library.deleteById(id);
35
36
结论
MicroStream、Jakarta NoSQL 和 Jakarta Data 组合为管理基于 Java 的现代应用程序中的数据提供了强大的工具和规范。这些技术有助于简化开发过程,使开发人员能够专注于构建满足用户需求的出色应用程序。Jakarta NoSQL 和 Jakarta Data 是关键规范,它们提供了一组标准的 API 和工具,用于管理基于 Java 的应用程序中的数据。这些规范有助于降低应用程序开发和维护的复杂性和成本,使开发人员能够在不同的 NoSQL 数据库和数据格式之间实现更大的互操作性和可移植性。
Qt 无标题无边框程序的拖动和改变大小
最近做项目遇到的问题,总结下。
有时候我们觉得系统的标题栏和按钮太丑太呆板,想做自己的标题栏以及最大化、最小化、关闭,菜单按钮,我们就需要
setWindowFlags(Qt::FramelessWindowHint);
但是这样过后,我们就不能拖动窗口改变位置,以及拖动边缘改变窗口大小了。
有两种方案处理这种情况:
1.自己对mouseMoveEvent,mousePressEvent,mouseReleaseEvent 等事件进行处理。
2.Qt可以处理windows的消息。大家重新实现bool winEvent(MSG *message, long *result);(在此又一次感觉Qt的NB)
我刚开始使用第一种方法去实现的。移动窗口很容易做,大家可以去看看这个大大写的,比网上其他版本问题少些。
http://blog.csdn.net/aqtata/article/details/8902889
在窗口边缘按下鼠标拖动改变窗口大小就比较麻烦了。
我是这样做的:
在mousePressEvent 按下设置m_bPressed为真。
在mouseMoveEvent中m_bPressed为真且event->x() 在窗口边缘 及处理算出鼠标移动的增量 然后不断resize窗口。
至于如何为边缘的断定,就自己设定一个 差值 假如 在窗口边缘 ±4个px 就算在在该边缘就处理该resize。
这样做缺点很多,1.拖快了不行,很容易超过该差值 , 2.窗口抖动的厉害,一直在resize,3.要处理太多情况
鉴于上诉缺点于是乎就到处问人百度google。有了第二种方法:
第二种方法很好用,效果和有标题边框程序一样~~~
Qt居然可以处理windows消息。。
这里我们要重新实现winEvent ( MSG * message, long * result )
该虚函数在QWidget和QWizard以及QSizeGrip以及他们的子类中都可以实现。
如果你想停止Qt处理消息就返回true,并且设置result到你想要保存的值返回给window处理。否者的话返回false。
这里我们主要想处理WM_NCHITTEST消息。
The WM_NCHITTEST message is sent to a window in order to determine what part of the window corresponds to a particular screen coordinate. This can happen, for example, when the cursor moves, when a mouse button is pressed or released, or in response to a call to a function such as WindowFromPoint . If the mouse is not captured, the message is sent to the window beneath the cursor. Otherwise, the message is sent to the window that has captured the mouse.
A window receives this message through its WindowProc function.
WM_NCHITTEST的消息响应函数会根据鼠标当前的坐标来判断鼠标命中了窗口的哪个部位,消息响应函数的返回值指出了部位,例如它可能会返回HTCAPTION,或者HTCLIENT等。(其返回值有很多,请查阅MSDN)。
知道这个就好了,我们还是要判断下鼠标的位置,然后通过该位置保存到result给window处理。
其实就是我们的程序没有边框不能发送这些消息,我们把它告诉windows,然后windows帮我们处理拖动,改变大小等效果。所以效果和有边框有标题程序效果一样的。
头文件申明:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
bool winEvent(MSG *message, long *result);
};
CPP实现
bool MainWindow::winEvent(MSG *message, long *result)
{
switch(message->message)
{
case WM_NCHITTEST:
int xPos = GET_X_LPARAM(message->lParam) - this->frameGeometry().x();
int yPos = GET_Y_LPARAM(message->lParam) - this->frameGeometry().y();
if(this->childAt(xPos,yPos) == 0)
{
*result = HTCAPTION;
}else{
return false;
}
if(xPos > 18 && xPos < 22)
*result = HTLEFT;
if(xPos > (this->width() - 22) && xPos < (this->width() - 18))
*result = HTRIGHT;
if(yPos > 18 && yPos < 22)
*result = HTTOP;
if(yPos > (this->height() - 22) && yPos < (this->height() - 18))
*result = HTBOTTOM;
if(xPos > 18 && xPos < 22 && yPos > 18 && yPos < 22)
*result = HTTOPLEFT;
if(xPos > (this->width() - 22) && xPos < (this->width() - 18) && yPos > 18 && yPos < 22)
*result = HTTOPRIGHT;
if(xPos > 18 && xPos < 22 && yPos > (this->height() - 22) && yPos < (this->height() - 18))
*result = HTBOTTOMLEFT;
if(xPos > (this->width() - 22) && xPos < (this->width() - 18) && yPos > (this->height() - 22) && yPos < (this->height() - 18))
*result = HTBOTTOMRIGHT;
return true;
}
return false;
}
把各种边界情况保存到result给windows处理,我们就省去很多事情,我想windows肯定比我们自己实现的效果要好多了。
以上的18 以及 22 是我对程序的边缘进行判断的范围。
因为
我做了边框阴影。阴影边框设定为20px所以在
xPos > 18 && xPos < 22 其实就是我们假定的边框了。
地址:http://download.csdn.net/detail/kfbyj/5810151
https://blog.csdn.net/kfbyj/article/details/9284923
以上是关于无标题的主要内容,如果未能解决你的问题,请参考以下文章
无循环的分组和条件(大数据)
Java之使用Hadoop探索大数据的世界
EXCEL大数据量导出的解决方案
大数据无人像怎么办
JAVA中类型(char、long、int.....一共八个)有符号和无符号是啥意思
无标题